TypeError:undefined不是Angular工厂中init函数的Karma / Jasmine测试中的函数

时间:2017-08-03 20:25:51

标签: javascript angularjs unit-testing jasmine karma-runner

我在AngularJS有简单的工厂:

function usersListDataProviderFactory(UserResource, $q) {
    var usersListDataProvider = {},
        queryParams = {};

    init(queryParams);

    return {
        initDataProvider: function (queryParams) {
            init(queryParams);
        },
        getDataProviderPromise: function () {
            return usersListDataProvider;
        }
    };

    function init(queryParams) {
        var defer = $q.defer();

        UserResource.getUsers(queryParams).then(function (response) {
            defer.resolve(response);
        }, function (error) {
            defer.reject(error);
        });

        usersListDataProvider = defer.promise;
    }
}

我在Karma / Jasmine上写了一些测试,这些测试在评论这些行之后通过:

init(queryParams);

当我恢复自动函数调用时,我收到一条消息:

TypeError: undefined is not a function (evaluating 'UserResource.getUsers(queryParams).then')

我知道问题是测试的配置和间谍创建的时刻,但我不知道如何解决问题。目前的测试配置:

describe('Service: UsersListDataProvider', function () {
    var usersListDataProvider,
        userResourceStub,
        deferred,
        $rootScope,
        $q;

    beforeEach(function () {
        module('UsersList');
    });

    beforeEach(function () {
        userResourceStub = {
            getUsers: function (queryParams) {
                return queryParams;
            }
        };

        module(function ($provide) {
            $provide.value('UserResource', userResourceStub);
        });
    });

    beforeEach(inject(function (_UsersListDataProvider_, _$rootScope_, _$q_) {
        usersListDataProvider = _UsersListDataProvider_;
        $rootScope = _$rootScope_;
        $q = _$q_;

        deferred = _$q_.defer();
    }));

    beforeEach(function () {
        spyOn(userResourceStub, 'getUsers').and.returnValue(deferred.promise);
    });

    describe('Method: initDataProvider', function () {
        it('');
    });
});

有什么想法吗?

0 个答案:

没有答案