何时在 jasmine 中使用 spy 与 $httpBackend

When to use spy vs $httpBackend in jasmine

我正在编写 Jasmine 代码来测试一些 Restangular 逻辑。我想测试我的 'Foo' object 是否已被 Restangulraized,以便 foo.getList() 方法将调用 GET /foo 和 return 结果

我可以通过两种方式对此进行测试。我可以在 foo.getList() 上添加一个 .spy 并使其 return 达到预期的结果。或者我可以使用 $HttpBackend.whenGET("/foo") 并在那里设置我的预期结果。

是否认为其中之一更可取?

我假设 HTTPBackend 是更好的选择,因为它在逻辑流程中测试 'later'。例如,如果我使用 spy,我无法证明我的 Restangularize 没有搞砸,而是试图解析一个不同的 URL。

但是,我正在查看继承的测试,它们都使用 spy,并且因为我假设编写此代码的人比我好(他们不可能比我更新手Angular) 这让我想知道使用 spy 是否优于 $httpBackend.

测试 foo.getList() 时,使用 httpBackend。一旦你测试了只使用 foo.getList() 的函数,然后使用间谍。这是避免重复测试的最简单的解决方案。

请注意,您正在编写单元测试。每个单元都应该独立于其他单元。

让我看看我能否解释一下 Sulthan 的意思。

使用 httpBackend 编写测试 REST API 调用的单元测试以模拟服务器 API。在这种情况下,您想测试 API 使用正确的参数进行正确的调用并接收正确的响应而不实际发出 http 请求,因此服务器是黑匣子。

使用间谍来测试使用客户端 API 代码的代码。例如,控制器将使用调用 API 的客户端 Restangular 服务。在这种情况下,黑盒是 Restangular 并且只关心预期的响应。