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);
基本的なものが欠けています(ジャスミンは初めてです)?どうすればよいですか?