尝试测试返回$http
GET 请求和then
处理程序的角度服务,但我无法测试逻辑是否在then
函数内部实际工作。这是服务代码的基本截断版本:
angular.module('app').factory('User', function ($http) {
var User = {};
User.get = function(id) {
return $http.get('/api/users/' + id).then(function (response) {
var user = response.data;
user.customProperty = true;
return user;
});
};
return User;
});
这是测试:
beforeEach(module('app'));
beforeEach(inject(function(_User_, _$q_, _$httpBackend_, _$rootScope_) {
$q = _$q_;
User = _User_;
$httpBackend = _$httpBackend_;
$scope = _$rootScope_.$new();
}));
afterEach(function () {
$httpBackend.verifyNoOutstandingRequest();
$httpBackend.verifyNoOutstandingExpectation();
});
describe('User factory', function () {
it('gets a user and updates customProperty', function () {
$httpBackend.expectGET('/api/users/123').respond({ id: 123 });
User.get(123).then(function (user) {
expect(user.customProperty).toBe(true); // this never runs
});
$httpBackend.flush();
});
});
我觉得我已经尝试了几乎所有方法来测试then
通话中的逻辑,所以如果有人可以提供建议,我将不胜感激。
编辑:我的问题也是由于非标准的注射做法,所以下面的答案在此之外起作用。