使用Jasmine's exceptGET/$httpBackend,what'respond()的好处

When using Jasmine's exceptGET / $httpBackend, what's the benefit of having .respond()?

本文关键字:respond what Jasmine exceptGET httpBackend 使用      更新时间:2023-09-26

我正在使用一本名为AngularJS Up and Running的书。给出了一个使用CCD_ 1的例子。这是一个例子:

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()并控制响应有什么好处?

如果您在单元测试中真的遇到了服务器上的API端点,它将不再是单元测试-它现在涉及的不仅仅是被测试的组件(控制器/服务/提供商等)-网络、web服务器、后端本身,可能还有数据库等-现在这将成为集成测试或系统/功能测试。

您的单元测试将不再是孤立的,并且将依赖于比它应该依赖的更多的东西。嘲讽的目的是使测试孤立、独立并模仿某些所需的条件——在本例中是HTTP响应——然后检查被测试组件的反应。

expect(ctrl.items).toEqual([{id:1, label: 'Mock'}]);

这个预期调用本身至少会检查模拟是否成功应用,并且items控制器变量是否包含模拟响应。

请查看更多信息:

  • 单元测试与功能测试
  • Mocking是什么