我試圖在我的摩卡測試中實例化我的控制器(使用Karma作爲跑步者)以測試一些控制器方法。我正在追蹤類似於這個Angular ES6 Webpack setup的東西。如何在我的Karma/Mocha測試套件中測試我的Angular 1.5控制器?
這裏就是我想:
// 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
作爲參數傳遞給構造函數(它應該是一個依賴注入)來傳遞,我無法弄清楚如何在someData
通過結合。
如果我不是嘗試$componentController
(如建議Angular 1.5 component docs),我得到這個奇怪的錯誤:
compileProvider.preAssignBindingsEnabled is not a function
所以,我擡頭一看這個方法$compileProvider.preAssignBindingsEnabled
,並試圖將其設置在兩個true
和false
我模塊配置,但它仍然拋出說它不是一個功能。所以我已經走到了死衚衕。
任何想法如何我可以實例化我的控制器使用它進行測試?
有趣。謝謝你的回答,我會檢查一下,看看是否是這個問題。 –
最後,這是問題嗎? – Yoann