TypeError:无法分配为只读属性-Karma

时间:2019-07-28 17:39:04

标签: javascript jquery angularjs jquery-ui karma-jasmine

通过grunt karma:unit命令运行测试用例(spec.js)时,我遇到了错误-

  

TypeError:无法分配为只读对象'[object Location]'的属性'assign'

引发错误的伪代码为:

$window.window.location.assign = _.noop;

spyOn($window.window.location, 'assign');

我试图在所有内容的下面放置一行以修复它,但是没有用-

$window.window.location.assign.writable = true;

有人可以分享他/她的观点来解决它吗?谢谢!!

1 个答案:

答案 0 :(得分:1)

window.location.assign不可写:

> Object.getOwnPropertyDescriptor(window.location, 'assign')

{value: ƒ, writable: false, enumerable: true, configurable: false}

这意味着您无法暂时覆盖它以对其进行监视。

我可以想到两种可能性:

  1. 在对您创建的角度服务的自定义调用中包装对window.location.assign的所有调用,从而可以对其进行监视。
  2. 测试在调用Location.assign之后,页面现在具有预期的URL。

2将更加困难,因为这可能会导致您离开测试。我建议1.一般而言,这是一个简单的重构,可大大简化您的测试。