gpt4 book ai didi

angularjs - 如何在 Angular 单元测试(Mocha)中模拟 $location.path

转载 作者:行者123 更新时间:2023-12-01 13:48:27 25 4
gpt4 key购买 nike

我正在使用 Karma、Mocha、Sinon 和 Chai 进行我的 Angular 单元测试,我正在尝试找出如何模拟我在 Controller 中使用 $location 进行的重定向。

我的 Controller 执行以下重定向:

$location.path('home');

我想尝试使用 spy 模拟重定向,这就是我目前正在做的:

describe('Auth Controller', function() {
var controller;
var $location;

beforeEach(function() {
bard.appModule('app.auth');
bard.inject('$controller', '$rootScope', '$location');
});

beforeEach(function() {
$location = {
path: sinon.spy().returned('Fake location')
};
controller = $controller('authCtrl', { $scope: $rootScope, $location: $location });
});

it('should take you to the metrics page on successful login', function() {
expect($location.path).to.have.been.calledWith("Fake location");
});

});

我收到以下错误:

TypeError: false is not a spy or a call to a spy!

我不确定如何正确地模拟这个,或者我是否以正确的方式进行模拟。

感谢单元测试专家的任何帮助。提前致谢!

最佳答案

您可以像这样使用 Spies 来测试 location.path(参见此处的 f.e:Spy on a service method call using jasmine Spies):

var location, objectUnderTest;

beforeEach(inject(function($location){
location = $location;
}));
function YourCtrlMaker() {
objectUnderTest = $controller('YourCtrl', {
$scope: $scope,
$location: location,
$routeParams: $routeParams,
})
}
it('should test location.path', function(){
spyOn(location, 'path');
YourCtrlMaker();
$scope.$root.$digest();
expect(location.path).toHaveBeenCalledWith('example.com/objects/');
});

关于angularjs - 如何在 Angular 单元测试(Mocha)中模拟 $location.path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33878594/

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