gpt4 book ai didi

javascript - 如何在 AngularJS 单元测试中模拟 $window.location.replace?

转载 作者:IT王子 更新时间:2023-10-29 03:08:34 31 4
gpt4 key购买 nike

我有以下服务:

angular.module("services")
.factory("whatever", function($window) {
return {
redirect: function() {
$window.location.replace("http://www.whatever.com");
}
};
});

如何在单元测试中模拟 $window 对象以防止在运行测试时重新加载页面?

我试过用

spyOn($window.location, 'replace').andReturn(true);

,但它没有用(仍然有 "Some of your tests did a full page reload!" 错误)和

$provide.value('$window', {location: {replace: jasmine.createSpy()}})

,但我收到一个错误(Error: [ng:areq] Argument 'fn' is not a function, got Object),堆栈跟踪仅指向 Angular 自己的源,所以它不是'非常有帮助...

最佳答案

在 Chrome 中(未在其他浏览器中测试),location.replace 是只读的,因此 spyOn 无法替换它。

$provide.value 应该有效。您的代码中一定有问题。

这是一个工作单元测试

describe('whatever', function() {
var $window, whatever;

beforeEach(module('services'));

beforeEach(function() {
$window = {location: { replace: jasmine.createSpy()} };

module(function($provide) {
$provide.value('$window', $window);
});

inject(function($injector) {
whatever = $injector.get('whatever');
});
});

it('replace redirects to http://www.whatever.com', function() {
whatever.redirect();
expect($window.location.replace).toHaveBeenCalledWith('http://www.whatever.com');
});
});

关于javascript - 如何在 AngularJS 单元测试中模拟 $window.location.replace?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252382/

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