【问题标题】:TypeError: Cannot assign to read only property 'now' of object '#<Performance>'TypeError:无法分配给对象“#<Performance>”的只读属性“now”
【发布时间】:2022-02-18 02:34:22
【问题描述】:

我刚刚将node升级到最新版本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) 

有人可以向我解释这个错误以及如何解决它吗?

【问题讨论】:

  • 如果我们不知道什么性能是很难说的。在项目中搜索一下,给我们一些思路,最好是更多代码
  • 能否把项目代码发给我们。

标签: node.js npm


【解决方案1】:

从节点 v14 升级到 v16 后,我在一些 Jest 单元测试中遇到了这个问题。

在我的测试中,我正在监视 performancenow() 方法来模拟它的实现,但我收到了相同的错误消息:

jest.spyOn(performance, "now")
  .mockImplementationOnce(() => 1000)
  .mockImplementationOnce(() => 2000);

// TypeError: Cannot assign to read only property 'now' of object '#<Performance>'

正如它所暗示的,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

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2017-11-30
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多