Angular Jasmine spyOn $resource 意外请求
Angular Jasmine spyOn $resource Unexpected request
我正在对 Angular 控制器进行单元测试,该控制器调用服务以获取 json 数据。我正在使用 Jasmine spyOn 来监视我的服务的查询方法,如下所示:
spyOn facilitiesService, 'query'
.and
.callFake (success, error) ->
deferred.promise.then success
deferred.promise.catch error
$promise: deferred.promise
我在开发期间在浏览器中为 运行ning 定义了一个模拟后端,它拦截真正的 REST 调用,并使用 $resource(path/to.json).query()
到 return 假数据。每当我启用模拟后端时,浏览器测试工作正常,但是当我执行 scope.$digest()
时,我的单元测试因意外请求而失败。当我监视方法时如何调用模拟后端?
我希望此配置与指定的模拟后端一起工作,这样我就可以在浏览器中更新应用程序之前查看文件和 运行 单元测试。
更新:
http://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview
这是我创建的一个 plunker,它显示了我所看到的行为。为什么要调用 $httpBackend 的 whenGET 方法?
我见过其他示例,其中他们创建了一个仅包含要监视的空方法的模拟服务,但在那种情况下,如果您已经拥有一个虚假服务,那么 spyOn 的 callFake 有什么意义,只需将 callFake虚假服务方法中的逻辑,不要为间谍而烦恼。
在您的模拟期望中,您的回应是:
$resource('bagels.json2').query()
但这又是触发 http 请求的原因。选项是在它前面再加一个期望:
$httpBackend.whenGET('bagels.json2').respond(function() {return []});
http://plnkr.co/edit/dkwl51kdMk6dADWs10bZ?p=preview
在下方评论后。这是您应该将期望放入测试用例的解决方案。
http://plnkr.co/edit/YimHnl2KztI7GET2MNWw?p=preview
此外,您有(导致调用 bagels.json2):
$httpBackend.whenGET('bagels.json').respond($resource('bagels.json2').query());
但你应该:
$httpBackend.whenGET('bagels.json').respond(function() {
$resource('bagels.json2').query()
});
我正在对 Angular 控制器进行单元测试,该控制器调用服务以获取 json 数据。我正在使用 Jasmine spyOn 来监视我的服务的查询方法,如下所示:
spyOn facilitiesService, 'query'
.and
.callFake (success, error) ->
deferred.promise.then success
deferred.promise.catch error
$promise: deferred.promise
我在开发期间在浏览器中为 运行ning 定义了一个模拟后端,它拦截真正的 REST 调用,并使用 $resource(path/to.json).query()
到 return 假数据。每当我启用模拟后端时,浏览器测试工作正常,但是当我执行 scope.$digest()
时,我的单元测试因意外请求而失败。当我监视方法时如何调用模拟后端?
我希望此配置与指定的模拟后端一起工作,这样我就可以在浏览器中更新应用程序之前查看文件和 运行 单元测试。
更新:
http://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview
这是我创建的一个 plunker,它显示了我所看到的行为。为什么要调用 $httpBackend 的 whenGET 方法?
我见过其他示例,其中他们创建了一个仅包含要监视的空方法的模拟服务,但在那种情况下,如果您已经拥有一个虚假服务,那么 spyOn 的 callFake 有什么意义,只需将 callFake虚假服务方法中的逻辑,不要为间谍而烦恼。
在您的模拟期望中,您的回应是:
$resource('bagels.json2').query()
但这又是触发 http 请求的原因。选项是在它前面再加一个期望:
$httpBackend.whenGET('bagels.json2').respond(function() {return []});
http://plnkr.co/edit/dkwl51kdMk6dADWs10bZ?p=preview
在下方评论后。这是您应该将期望放入测试用例的解决方案。
http://plnkr.co/edit/YimHnl2KztI7GET2MNWw?p=preview
此外,您有(导致调用 bagels.json2):
$httpBackend.whenGET('bagels.json').respond($resource('bagels.json2').query());
但你应该:
$httpBackend.whenGET('bagels.json').respond(function() {
$resource('bagels.json2').query()
});