【发布时间】:2015-08-03 18:39:44
【问题描述】:
我已经为此奋斗了一段时间,需要一些指导。我想对这个 Angular 服务进行单元测试...具体来说,是承诺的失败部分。
(function () {
angular.module('testable')
.factory('myService', ["$http", "$q", function ($http, $q) {
return {
createThing: function(thing) {
return $http.post("//...", thing)
.then(function (response) {
return response.data;
}, function (response) {
return $q.reject(response.statusText);
});
}
};
}]);
}());
我已经浏览过许多关于此的 SO 帖子,但每个帖子似乎都有点不同。首先,如果我的任何服务代码在设置承诺时不正确,请阻止我。我已经经历了大约 10 次不同的迭代来测试被拒绝的承诺,但没有任何效果。这是我所拥有的:
beforeEach(inject(function ($injector,myService) {
sut = myService;
$httpBackend = $injector.get('$httpBackend');
$q = $injector.get('$q');
$rootScope = $injector.get('$rootScope');
dataToSend = "send me!";
deferred = $q.defer();
}));
it("should get error on error", function () {
var result,
expected = "FAIL!!!!!";
deferred.reject(expected);
$httpBackend.expectPOST(testUrl,dataToSend).respond(deferred.promise);
sut.createThing(dataToSend).then(function (returnFromPromise) {
result = returnFromPromise;
});
$rootScope.$apply();
$httpBackend.flush();
// expect something here but result is always wrong
});
我知道 Promise 是异步运行的……而且我一直在拼凑一些信息,但是有人对完成这个单元测试有什么建议吗?
【问题讨论】:
-
你在
$httpBackend上看过the docs吗? -
是的......这就是我使用 expectPost 的原因,以便我可以返回承诺
标签: javascript angularjs unit-testing jasmine angular-promise