Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用$q在Angular中测试服务_Javascript_Angularjs_Unit Testing_Testing_Jasmine - Fatal编程技术网

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

Javascript 如何使用$q在Angular中测试服务,javascript,angularjs,unit-testing,testing,jasmine,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); retu

我有一个简单的服务:

.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函数中的回调。我做错什么了吗?我在《茉莉花》中读到了callFake方法,但说实话,我认为使用它没有什么意义。你能解释一下使用它有什么好处吗?顺便说一句,我有Jasmine 2.0和最新的angular with angular Mock。

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

之前,每个
都将函数作为参数。如果希望它是异步的,那么函数应该接受回调函数。检查这个问题,我真的不明白它应该如何工作。现在我已经在每个函数(function(done))之前调用了
,但是我应该在什么时候调用它呢?在
内部,然后是
(不起作用)还是外部(两者都不起作用)?