gpt4 book ai didi

angularjs - Angular - Material - 测试 - $mdSidenav

转载 作者:行者123 更新时间:2023-11-28 21:29:12 25 4
gpt4 key购买 nike

我第一次在 Stack 上写问题 ;)我在测试 $mdSidenav( Angular Material 组件。请参阅 https://material.angularjs.org/)时遇到问题。在我的 Controller 中,我有类似的东西:

$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();
});

});

但是业力给我这个错误:

Error: Expected a spy, but got Function.

我希望有人能帮助我;)

最佳答案

您可以尝试不同的方法,使用 $provide 和匿名模块来注入(inject)模拟。

我在这里使用的是 sinon,但您可以更改为适当的 Jasmine 代码:

var spy = sinon.spy();

beforeEach(module(function ($provide) {
$provide.value('$mdSidenav', function (v) {
return {
toggle: spy
}
});
}));

然后在测试中:

sinon.assert.calledOnce(spy);

关于angularjs - Angular - Material - 测试 - $mdSidenav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com