我试图在我的Mocha测试中实例化我的控制器(使用Karma作为跑步者)以测试一些控制器方法。我正在关注类似Angular ES6 Webpack setup的内容。
这是我尝试的内容:
// controller.js
// also, the component that uses this controller
// declares some bindings, like "someData: '<'"
export default class SomeController {
// notice the injection
constructor($timeout) {
// uses ng-annotate
'ngInject';
}
}
// test.spec.js (same dir as controller)
import SomeController from './controller.js'
describe('MyComponent', () => {
let $rootScope;
let $componentController;
let $timeout;
let makeController;
beforeEach(window.module('app'));
beforeEach(inject((_$componentController_, _$timeout_) => {
$componentController = _$componentController_;
$timeout = _$timeout_;
makeController = () => {
// I've tried the 2 options below
// return new Controller($timeout)
// return $componentController('myComponent', { $timeout }, { someData: [] });
};
}));
describe('Controller', () => {
it('does something', () => {
// FAILS HERE
$ctrl = makeController();
});
});
});
所以,当我做new Controller()
时,它期望$timeout
作为参数传递给构造函数(它应该是依赖注入),我可以&#39 ;弄清楚如何传递someData
绑定。
如果我尝试$componentController
(按Angular 1.5 component docs推荐),我会收到这个奇怪的错误:
compileProvider.preAssignBindingsEnabled is not a function
所以,我查找了这个方法$compileProvider.preAssignBindingsEnabled
,并尝试在我的模块配置中将其设置为true
和false
,但它仍然会说它不是功能。所以我已经走到了尽头。
关于如何实例化我的控制器以将其用于测试的任何想法?
答案 0 :(得分:6)
您使用的是哪种角度?遇到了同样的问题,事实证明我的角度为1.5.7,角度为1.5.10。 将角度模拟放置到1.5.7(相同版本的角度)修复了问题。 preAssignBindingsEnabled已添加到1.5.10 例如:https://github.com/angular/angular.js/blob/master/CHANGELOG.md