测试服务返回的承诺值

时间:2014-09-22 13:02:35

标签: angularjs angular-promise

如何测试服务返回的承诺的值?$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();
       });
    });
});

1 个答案:

答案 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();
        });
    });
});