测试AngularJS服务(厂)有因果报应和茉莉花
我的服务(厂)是这样的:测试AngularJS服务(厂)有因果报应和茉莉花
angular.module('App')
.factory('SalesService', function($http) {
return {
getSales: function(data) {
return $http.get('/sales');
}
}
})
我意外的请求:GET /销售当我这样做:
describe('Sales Services', function() {
beforeEach(module('App'));
it('should get the sales data', inject(function(SalesServices, $httpBackend) {
SalesServices.getSales().then(function(data) {
expect(data.success).toBeTruthy();
});
$httpBackend.flush();
}));
});
一切对我来说似乎没问题。我做错了什么?
为了不inject
在所有测试你的依赖,你应该使用beforeEach
:
var $httpBackend, SalesService;
beforeEach(module('App'));
beforeEach(inject(function (_$httpBackend_, _SalesService_) {
$httpBackend = _$httpBackend_;
SalesService = _SalesService_;
}));
然后,在您的测试,你应该预期调用一些网址:
it('should get the sales data', function() {
// given
var response = { data: 'result' };
var result = {}
$httpBackend.expect('GET', '/sales').respond(200, response);
// when
SalesService.getSales().then(function (responseData) {
result = responseData;
});
$httpBackend.flush();
// then
expect(result).toEqual(response);
});
最后,您需要确保没有待处理的请求:
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
响应方法在做什么$ httpBackend.expect('GET','/sales').respond(200,response); '?我的get不接受任何请求param,为什么我需要在这里传递响应对象? –
和第5行的'suite'是从哪里来的? –
@ThianKianPhin你现在可以忽略套件对象,我将它删除。这是我们稍后可以讨论的额外优化。 – tomepejo
这里输入错误:.getSaless() – ppasler
@ppasler修复了输入错误,我确定这不是问题 –
另一个:'SalesServices'和工厂创建'SalesService'而没有's' – ppasler