我正在使用名为AngularJS Up and Running的书。它给出了使用exceptGET
的示例。这是一个例子:
mockBackend = $httpBackend;
mockBackend.exceptGET('/api/note')
.respond([{id:1, label: 'Mock'}]);
我的问题是,单元测试服务器调用是不是要调用服务器并验证服务器调用是否符合预期?
使用上面的代码,它是否只是进行服务器调用并强制响应等于[{id:1, label: 'Mock'}]
?如果我们无法检查实际响应是什么,那么该怎么做呢?
因为稍后在代码中,它会像这样检查响应:
mockBackend.flush();
expect(ctrl.items).toEqual([{id:1, label: 'Mock'}]);
它不会始终等于[{id:1, label: 'Mock'}]
,因为那是我们强迫回应平等的原因吗?拥有.respond()
并控制响应的好处是什么?
答案 0 :(得分:1)
如果您实际上在单元测试中点击服务器上的API端点,它将不再是单元测试 - 它现在将涉及的不仅仅是您正在测试的组件(控制器/服务/提供商等) - 网络,Web服务器,后端本身,可能是数据库等 - 现在这成为集成测试或系统/功能测试。
您的单元测试将不再被隔离,并且将取决于应有的更多事情。模拟的目的是使测试独立,独立并模仿某些所需的条件 - 在这种情况下是HTTP响应 - 然后检查被测组件的反应。
expect(ctrl.items).toEqual([{id:1, label: 'Mock'}]);
这个期望调用本身至少会检查 mock是否已成功应用并且items
控制器变量包含模拟的响应。
请参阅: