我有一个工厂来执行get请求,我想测试一下。不幸的是,业力测试告诉我$ httpBackend没有定义响应。
AngularJs 1.2.14, Jasmine 2.0, Karma 0.12.0
这是我要测试的模块:
var appFactory = angular.module('appFactory', []);
appFactory.factory('boxListService', function($http){
return{
getList: function(){
return $http.get('/boxlist').then(function(result){
return result.data;
});
}
};
});
我的测试是这样的:
describe('Module-Test', function() {
beforeEach(module('appFactory'));
it('should call $http.get in getList', inject(function (boxListService, $httpBackend){
$httpBackend.expectGET('/boxlist');
boxListService.getList();
$httpBackend.flush();
}));
});
消息:
Error: No response defined !
at $httpBackend (D:/nodeJS/host/test_app/src/public/js/libs/angular/angular-mock.js:1206:13)
答案 0 :(得分:25)
您必须定义预期的响应以及预期的请求。它将具有以下形式:
$httpBackend.expectGET('/boxlist').respond(HTTP_STATUS_CODE, EXPECTED_RESPONSE);
HTTP_STATUS_CODE是一个整数。 EXPECTED_RESPONSE是要返回的值(通常是Object Literal)。
您只能定义其中一个。
查看ngMock httpBackend文档以获取更多信息。
答案 1 :(得分:1)
以防它有所帮助,因为它发生在我身上,虽然这不是问题的确切情况。我有这两行:
$httpBackend.whenGET(myService.serviceURL).respond(myMock);
$httpBackend.expectGET(myService.serviceURL);
使用when
我想要在调用服务时定义响应内容,并使用expect
我想检查方法是否被调用。
这不起作用(虽然有时会这样,但我不知道为什么)。我猜不知道expect
覆盖了when
,因此我得到了
错误:未定义响应!
解决方案是删除when
子句并将respond()
添加到expect
$httpBackend.expectGET(myService.serviceURL).respond(myMock);
我不知道为什么框架会以这种方式运行。如果有人知道你在这里解释它以改善答案会很好