angular.mock.module和angular.mock.inject函数在jasmine的beforeAll中不起作用

时间:2017-06-19 07:21:20

标签: angularjs unit-testing jasmine

我想使用jasmine的beforeAll而不是beforeEach但angular.mock.module和angular.mock.inject函数在beforeAll中不起作用,而它们在beforeEach中工作。

这是我的测试。 相同的代码在使用之前的方法中工作。

describe("This is a test", function () {
    beforeAll(module("app"));

    var vm;
    beforeAll(function() {
        angular.mock.module(function ($provide) {
            $provide.factory("dataService", ["$q", function ($q) {
                return {
                    getSomeDataById: function () { return $q.resolve({ }); }
                };
            }]);
        });

        angular.mock.inject(function (_$controller_,dataService) {
            vm = _$controller_("TestController",
            {
                dataService: dataService
            });
        });
    });
});

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,使用module.sharedInjector()调用解决了它:

describe("This is a test", function () {

    // Call SharedInjector before any call that might invoke the injector
    angular.mock.module.sharedInjector();

    beforeAll(module("app"));

    var vm;
    beforeAll(function() {
        angular.mock.module(function ($provide) {
            $provide.factory("dataService", ["$q", function ($q) {
                return {
                   getSomeDataById: function () { return $q.resolve({ }); }
               };
            }]);
        });

        angular.mock.inject(function (_$controller_,dataService) {
            vm = _$controller_("TestController",
            {
                dataService: dataService
            });
        });
    });
});