Jos*_*eam 0 javascript mocha.js angularjs karma-runner
我正在尝试在Mocha测试中实例化控制器(使用Karma作为运行程序),以测试某些控制器方法。我正在遵循与此Angular ES6 Webpack设置类似的内容。
这是我正在尝试的:
// 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';
}
}
Run Code Online (Sandbox Code Playgroud)
。
// 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();
});
});
});
Run Code Online (Sandbox Code Playgroud)
因此,当我这样做时new Controller(),它希望$timeout作为构造函数的参数传递(应该是依赖注入),而我不知道如何传递someData绑定。
如果我改为尝试$componentController(按照Angular 1.5 component docs的建议),则会收到此奇怪的错误:
compileProvider.preAssignBindingsEnabled is not a function
Run Code Online (Sandbox Code Playgroud)
所以,我抬头一看这个方法$compileProvider.preAssignBindingsEnabled,并试图将它设置为两个true,并false在我的模块配置,但它仍然抛出说这是不是一个函数。所以我已经死胡同了。
关于如何实例化控制器以进行测试的任何想法?
小智 6
您使用的是哪个版本的angular?遇到了同样的问题,结果发现我有1.5.7的角度和1.5.10的角度模拟。将角球设置为1.5.7(角球的相同版本)可解决此问题。preAssignBindingsEnabled已在1.5.10上添加,例如:https : //github.com/angular/angular.js/blob/master/CHANGELOG.md
| 归档时间: |
|
| 查看次数: |
500 次 |
| 最近记录: |