2016-11-25 82 views
1

我有了一種方法如何在我的子控制器中嘲笑這個方法來測試它?

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

我似乎無法找到方法來測試handleChange()方法或茉莉花控制器對象這個角度控制器,因爲這兩個測試拋出這個錯誤: 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(); 

希望有所幫助。

相關問題