0

Jasmine次のように、コントローラーの作成時に呼び出す無限再帰関数を備えたコントローラーで単体テストを試みています。

angular.module('myApp')
.controller('LargeHomeCtrl', ['$scope', '$timeout', 
    function ($scope, $timeout) {

    //some code to be tested

    function updateInfo () {
    //do some things
        $timeout(updateInfo(), 8000);
    }

    updateInfo();
}]);

しかし、単体テスト用に以下のコードのようにこのコントローラーを挿入することはできません。そうしないと、このエラーが発生します。

WARN [PhantomJS 1.9.8 (Linux)]: Disconnected (1 times), because no message in 10000 ms.

beforeEach(inject(function ($controller, _$rootScope_) {
    spyOn($controller, 'updateInfo').and.returnValue(null);
    $scope = _$rootScope_;
    $ctrl = $controller('LargeHomeCtrl', {
        $scope: $scope
    });
}));

関数をモックする方法は他にありませんが、コントローラーのインジェクションの前に関数を定義するとupdateInfo() method does not exis、コントローラーがまだインジェクトされていないため、エラー ( t) が発生します。

次のように、関数 updateInfo() を spyOn でモックしようとします。

spyOn($controller, 'updateInfo').and.returnValue(null);

基本的なものが欠けています(ジャスミンは初めてです)?どうすればよいですか?

4

0 に答える 0