在整个测试套件中配置$ injector

时间:2016-05-03 13:55:49

标签: javascript angularjs jasmine

我正在维护一个类似于:

的旧项目
beforeEach(angular.mock.module('project'));
beforeEach(angular.mock.module('project.mocks'));

在2000次测试中的每一次测试之前。 是否可以在开始时加载此模块一次,我尝试过:

beforeAll(angular.mock.module('project'));
beforeAll(angular.mock.module('project.mocks'));

但它似乎没有起作用。

1 个答案:

答案 0 :(得分:0)

beforeAll因为ngMock uses beforeEach设置了规格注入器而无法工作。

可以做

beforeAll(angular.mock.module('project'));

如果beforeEach替换为beforeAll中的ngMock。但它肯定不应该如此,因为喷射器应该在每个规格之后被拆除。

固定框架的问题通常表明设计存在缺陷,并与建议的使用方案相冲突。在这种情况下,问题是单个Angular模块。 Angular应用程序不应该像这样进行测试,这就是为什么缺少请求的功能并且无法顺利实现的原因。

当加载整个应用程序模块时,不能单独测试这些单元,这与单元测试的概念形成对比。可重用性和可测试性是多个Angular模块的关注点。

当应用程序单元极其分离为单独的模块

angular.module('project', ['project.some', 'ui.router', ...]);

angular.module('project.some', ['project.some.someCtrl', 'project.some.someSvc', 'ui.router']);

angular.module('project.some.someCtrl', []).controller('SomeController', ...);

模块在测试中对彼此的影响不受限制,可以任意组合加载和模拟。