2016-11-25 11 views
1

私は方法子コントローラでこのメソッドをモックしてテストするにはどうすればよいですか?両方のテストは、このエラーを投げるよう

$scope.handleChange = function (index) { 
    //Logic 
    $scope.$parent.doSomething(); 
}; 

があり、この角度コントローラを持っている私は、ジャスミンとhandleChange()方法ORコントローラオブジェクトをテストする方法を見つけるように見えることはできません。 TypeError: $scope.$parent.doSomething is not a function

は、私はこれをやった:私は間違って

beforeEach(inject(function ($controller, $injector, $q, $rootScope) { 
var qReference = $q; 
var rootScopeReference = $rootScope; 
var $scope = rootScopeReference.$new(); 

var controllerReference = $controller('MyController', { 
     $scope: $scope 
    }); 
})); 

it('Test Case-1: Mycontroller is defined', function() { 
    expect(controllerReference).toBeDefined(); 
}); 

何をやっているとどのように私はこの問題を解決することができますか?

答えて

0

あなただけのスパイを使用して、メソッドdoSomethingのを嘲笑、あなたのテストクラス内の変数にスコープを保存することができます。

var myScope = $rootScope.$new(); 

spyOn(myScope.$parent, 'doSomething'); 

次に、あなたのコントローラに渡し:

var controllerReference = $controller('MyController', { 
    $scope: myScope 
}); 

そして、あなたの上アサーションブロックは次のようになります。

expect(myScope.$parent.doSomething).toHaveBeenCalled(); 

関連する問題