如何使用$ q在Angular中测试服务

时间:2014-09-24 12:12:27

标签: javascript angularjs unit-testing testing jasmine

我有一项简单的服务:

.factory('list', function($q, $timeout) {
    return {
        get: function() {
            var dfd = $q.defer();

            $timeout(function () {
                dfd.resolve(['label1', 'label2']);
            }, 10);

            return dfd.promise;
        }
    };
});

并想测试它。所以我创建了:

describe('list', function() {

    var list, labels;

    beforeEach(module('app'));
    beforeEach(inject(function($q, _list_) {
       list = _list_;

       spyOn(list, 'get').and.callThrough();

       list.get().then(function(result) {
           labels = result;
       });
    }));

    describe('getting list of labels', function() {

        it('should return list of labels', function() {
            expect(labels).not.toBe(undefined);
            expect(Array.isArray(labels)).toBeTruthy();
        });

     });

});

但问题是,即使服务中的get方法返回promise,也不会执行then函数中的回调。难道我做错了什么?我在Jasmine中读到了callFake方法,但老实说我没有看到使用它的重点。你能解释一下使用它有什么好处吗?顺便说一句,我有Jasmine 2.0和最新角度的角度模拟。

1 个答案:

答案 0 :(得分:0)

答案很简单,我忘记了。由于我使用了$ timeout,我之后应该调用flush