我刚刚将节点升级到最新版本 v16.13.1 我尝试运行现有项目,但它因以下错误而崩溃:
performance.now = present;
^
TypeError: Cannot assign to read only property 'now' of object '#<Performance>'
at Function.present.conflict (/Project_Path/node_modules/mstime/dist/cjs/present.js:39:19)
at Object.<anonymous> (/Project_Path/node_modules/mstime/dist/cjs/present.js:41:9)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Object.require.extensions.<computed> [as .js] (/Project_Path/node_modules/ts-node/src/index.ts:485:14)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/Project_Path/node_modules/mstime/dist/cjs/index.js:5:16)
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这个错误以及如何解决它吗?
小智 6
从节点 v14 升级到 v16 后,我刚刚在一些 Jest 单元测试中遇到了这个问题。
在我的测试中,我正在监视模拟其实现now()的方法performance,但我收到了相同的错误消息:
jest.spyOn(performance, "now")
.mockImplementationOnce(() => 1000)
.mockImplementationOnce(() => 2000);
// TypeError: Cannot assign to read only property 'now' of object '#<Performance>'
Run Code Online (Sandbox Code Playgroud)
正如它所暗示的,该now属性是只读的,不能重新分配。作为一种解决方法,我曾经Object.defineProperty将其设置为可写。之后模拟实现运行良好。
// redefining readonly property of the performance object
Object.defineProperty(performance, "now", {
value: jest.fn(),
configurable: true,
writable: true
});
// mocking an execution delta of 1000ms
jest.spyOn(performance, "now")
.mockImplementationOnce(() => 1000)
.mockImplementationOnce(() => 2000);
// ok now
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10428 次 |
| 最近记录: |