我第一次在Stack上写一个问题;) 我有一个问题要测试$ mdSidenav(角度材料组件。请参阅https://material.angularjs.org/)。 在我的控制器中,我有类似的东西:
$scope.toggleRight = function() {
$mdSidenav('right').toggle();
};
我想测试一下。所以在我的测试文件中,我首先创建了一个这个对象的模拟:
var $mdSidenav = function(test){
return {
toggle: function(){
return true;
}
};
};
beforeEach(inject(function ($controller) {
$scope = $rootScope.$new();
createController = function () {
return $controller('headerCtrl', {
'$scope': $scope,
'$mdSidenav': $mdSidenav
});
};
}));
然后我试图测试它:
describe('toggleRight method', function(){
beforeEach(function(){
spyOn($mdSidenav('right'), 'toggle').and.callThrough();
});
it('Should toggleRight open/close', function(){
$scope.toggleRight();
expect($mdSidenav('right').toggle).toHaveBeenCalled();
});
});
但业力发给我这个错误:
错误:期待间谍,但得到了功能。
我希望有人可以帮助我;)
答案 0 :(得分:1)
您可以尝试不同的方法,使用$ provide和匿名模块来注入模拟。
我在这里使用sinon,但你可以改为适当的Jasmine代码:
var spy = sinon.spy();
beforeEach(module(function ($provide) {
$provide.value('$mdSidenav', function (v) {
return {
toggle: spy
}
});
}));
然后在测试中:
sinon.assert.calledOnce(spy);