虽然我相信我按照这里的说明设置$ httpBackend将选定的请求传递给服务器,但它对我不起作用.
这是一个带有失败测试的Plunkr,它显示了我正在做的事情并在评论中解释了什么似乎出了问题.
我的洞察力表明,由于某种原因,模拟$httpBackend没有真实的内部副本,$httpBackend因此,当需要通过XHR请求时,它会将其传递给模拟$httpBackend.第二个调用抛出异常,因为它不知道如何处理请求.
我很遗憾地记得你在中途测试的帖子.您确定了一系列重要的集成测试,它们介于单元测试和E2E测试之间.我站在那个中间地带.
我觉得你根本不是很讽刺.你的答案是完全合理的......或者如果不与" API reference/ngMockE2E/$ httpBackend " 的文本相矛盾,那将是合理的.我引用:
此实现可用于经由所述静态或动态响应响应
whenAPI及其快捷方式(whenGET,whenPOST等)和任选地通过请求传递到实际$httpBackend用于特定请求(例如与某些远程的API交互或者从网络服务器获取模板) ...[I] n端到端测试场景或在使用模拟替换真实后端api开发应用程序的情况下,通常需要某些类别的请求绕过模拟并发出真实的http请求 ....要使用此行为配置后端,请使用
passThroughwhen 的请求处理程序而不是respond.[强调我的].
该文档没有提及$httpBackendJasmine环境中的E2E 使用问题.我想不出有理由排除它.如果有这样的理由,他们应该清楚说明.说真的,谁读了一个模拟组件,并没有预料到在测试环境中使用它?
" 将请求传递给真实$httpBackend的特定请求,例如与某些远程api进行交互 "正是我打算做的.除了该组件的非模拟版本之外,"真正的$ httpBackend"可能意味着什么呢?
我不明白你的说法
该
ngMocksE2E模块设计用于执行实际角度应用程序的"服务器"端.
"服务器"这个词在该页面上出现了3次,而不是曾经暗示任何应用程序代码都会在"服务器"上执行.我不知道你在"服务器"方面执行的"实际角度应用"是什么意思.
文档非常明确,E2E $httpBackend不仅限于E2E测试.它也适用于" 正在开发应用程序并将真实后端api替换为模拟 "的情况.
这距离我使用真正的后端api 测试应用程序的情况只有半步之遥."
在我的场景中,SUT正在调用从服务器获取数据的组件.我的测试用于验证此依赖组件是否成功完成了对真实后端的此类请求,并将以预期方式检索或保存数据.这是一种集成测试,通过模拟后端的行为无法充分满足.
当然,我可以使用模拟XHR响应来测试(并进行测试)组件能够正确响应我预测的后端行为.这与验证组件对 …