我有一个Api服务,负责控制我的所有http请求。 GET,POST,PUT,DELETE ......
我正在尝试编写一些unitTests,但我遇到了以下情况的问题。
self.Api.post('/myEndpoint/action/', actionData)
.then(function(resp){
result = _.get(resp, 'data.MessageList');
if(resp.status = 200 && result) {
setActionResults(resp.data);
}
});
我想在我的unitTest中模拟resp。我该怎么办?我必须在这里模拟httpBackend服务http://plnkr.co/edit/eXycLiNmlVKjaZXf0kCH?p=preview吗?我可以用其他方式吗?
答案 0 :(得分:2)
使用httpBackend
是可行的方法,模拟应用程序发出的每个请求都可以正常工作。但是,您也可以模拟整个服务,并使用模拟服务而不是原始服务进行单元测试。无论如何,httpBackend
处理(对于http请求服务)比使用原始的相同接口创建新服务要简单得多。但在某些情况下,您可能需要控制服务的功能,因此您必须使用服务模拟。
例如:
angular.module('myApp')
.service('DataService', function ($http) {
this.getData = function () {
return $http.get('http://my.end.point/api/v1/data')
.then(function (response) {
return response.data;
});
};
});
angular.module('myAppMock')
.service('MockedDataService', function ($q) {
this.getData = function () {
return $q.resolve({ data: 'myData' }); // you can add a delay if you like
}
});