我有一个使用Angular 1.5 的项目构建, 1.6 更新Angular团队决定默认情况下禁用预分配控制器绑定,如果你想启用它们然后你需要做:$compileProvider.preAssignBindingsEnabled(true);
这对应用程序本身来说不是什么大问题,我需要做的就是添加一个使用$compileProvider
的配置语句
.config(function($compileProvider){
$compileProvider.preAssignBindingsEnabled(true);
})
但是在测试方面,我遇到了麻烦。我有很多模块,其中没有一个使用config
。
我有测试可以拉入我所有的模块并运行这样的东西:
beforeEach(function () {
module('myModule');
inject(function ($injector) {
$rootScope = $injector.get('$rootScope');
$compile = $injector.get('$compile');
});
// do stuff, run tests
});
这些测试现在都失败了。对此的简单修复是为所有模块添加一个配置,并在所有这些模块上运行compileProvider或执行以下操作:
// myModule1.spec.js
beforeEach(function () {
module('myModule', function ($compileProvider) {
$compileProvider.preAssignBindingsEnabled(true);
});
...
});
// myModule2.spec.js
beforeEach(function () {
module('myModule2', function ($compileProvider) {
$compileProvider.preAssignBindingsEnabled(true);
});
...
});
// myModule3.spec.js
beforeEach(function () {
module('myModule3', function ($compileProvider) {
$compileProvider.preAssignBindingsEnabled(true);
});
...
});
但问题是我有不到一百个组件,并希望在全球范围内将其设置在一个地方。
我怎么能这样做?有可能吗?
答案 0 :(得分:1)
我想出了如何为我的整个应用配置一次此设置。
在karma.conf.js中,在包含angular-mocks.js之后,包含另一个配置ngMock模块的文件:
(function() {
'use strict';
angular.module('ngMock').config(function($compileProvider) {
$compileProvider.preAssignBindingsEnabled(true);
});
})();
这修复了我的所有测试。
答案 1 :(得分:0)
是
beforeEach(module(function ($compileProvider) {
$compileProvider.preAssignBindingsEnabled(true);
}));
...
beforeEach(module('app'));
或
angular.module('test.compile', []).config(function ($compileProvider) {
$compileProvider.preAssignBindingsEnabled(true);
})
...
beforeEach(module('test.compile'));
...
beforeEach(module('app'));
每个规范可能有多个beforeEach(module(...))
块。由于以这种方式加载的模块是堆叠的,因此具有$compileProvider
配置的模块属于顶级describe
块。