如何测试服务返回的承诺的值?在$q documentation中,使用resolve(value)在测试中预设promise值。其他方法使用AngularJS评估promise并绑定$ scope的值来测试控制器中的服务逻辑。
在我看来,这些方法都没有在应该测试的地方实际测试服务的逻辑。如何测试已解析的promise(由服务返回)包含正确的值?
这是一个例子:
myApp.service('service', function($q){
var obj = {};
obj.test = function() {
var deferred = $q.defer();
deferred.resolve(false);
return deferred.promise;
}
return obj;
});
为了测试服务,我想在理论上做以下事情(在实践中不起作用): var $ q,service;
beforeEach(function () {
module('myModule');
service = $injector.get('service');
});
describe('...', function() {
it('Testing whether promise contains correct value', function() {
var myPromise = service.test();
myPromise.then(function(value) {
expect(value).toBeFalsy();
});
});
});
答案 0 :(得分:0)
我相信你是以错误的方式注入服务。您必须使用下划线表示法。请参阅此链接。 http://nathanleclaire.com/blog/2014/04/12/unit-testing-services-in-angularjs-for-fun-and-for-profit/
所以,你的测试看起来应该是这样的。
var service;
beforeEach(function () {
module('myModule');
inject(function(_service_) {
service = _service_;
});
});
describe('...', function() {
it('Testing whether promise contains correct value', function() {
var myPromise = service.test();
myPromise.then(function(value) {
expect(value).toBeFalsy();
});
});
});