コントローラメソッドのいくつかをテストするために、私は自分のモカのテストでコントローラをインスタンス化しようとしています(ランナーとしてカルマを使用しています)。私はこれに似たものを次のようにしています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
に渡す方法を見つけ出すことはできません。
私が代わりに(Angular 1.5 component docsによって推奨されているように)$componentController
をしようとすると、私はこの奇妙なエラーを取得:だから
compileProvider.preAssignBindingsEnabled is not a function
を、私はこの方法$compileProvider.preAssignBindingsEnabled
を見上げるとtrue
、私の中false
の両方に設定してみましたモジュール構成ですが、それはまだ関数ではないと言っています。だから私は行き詰まった。
コントローラをインスタンス化してテストに使用する方法はありますか?
興味深い。答えをありがとう、私はそれが問題であるかどうかを確認します。 –
最後に、それは問題でしたか? – Yoann