2016-12-15 5 views
0

コントローラメソッドのいくつかをテストするために、私は自分のモカのテストでコントローラをインスタンス化しようとしています(ランナーとしてカルマを使用しています)。私はこれに似たものを次のようにしています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の両方に設定してみましたモジュール構成ですが、それはまだ関数ではないと言っています。だから私は行き詰まった。

コントローラをインスタンス化してテストに使用する方法はありますか?

答えて

4

どの角度の角度を使用していますか?同じ問題に遭遇し、私は角度1.5.7と角度モック1.5.10を持っていたことが判明しました。 角度モックを1.5.7(角度の同じバージョン)に設定すると問題が解決しました。 preAssignBindingsEnabledは1.5.10 などに追加されました:https://github.com/angular/angular.js/blob/master/CHANGELOG.md

+0

興味深い。答えをありがとう、私はそれが問題であるかどうかを確認します。 –

+0

最後に、それは問題でしたか? – Yoann

0

あなたが角度1.5.5にダウングレードする必要があるとしています。それより高いものは、 "TypeError:$ compileProvider.preAssignBindingsEnabledは関数ではありません"というエラーが表示されます。

また、あなたが角モックのバージョンが同じであることを確認してください(1.5.5)。

関連する問題