Enzyme typescript – 无法设置 [object Event] 的属性目标,它在 Function.assign 中只有一个 getter

问题描述 投票:0回答:1

代码:

...
wrapper.find('input').simulate('input', { target: {value: 's'}})

命令:

jest test

结果

Cannot set property target of [object Event] which has only a getter at Function.assign

node_modules/enzyme-adapter-preact-pure/build/src/MountRenderer.js 中的错误

    var event = new Event(eventName, {
        bubbles: args.bubbles,
        composed: args.composed,
        cancelable: args.cancelable,
    });
    Object.assign(event, args);

Event 是来自 typescript/libs/lib.d.ts 的接口

interface Event {
    ...
    readonly target: EventTarget | null;
    ...
}

target 是readonly,如何设置自定义目标?

package.json

"@types/jest": "^24.0.19",
"@types/jquery": "^3.3.31",
"enzyme": "^3.10.0",
"enzyme-adapter-preact-pure": "^2.1.0",
"enzyme-to-json": "^3.4.3",
"jest": "^24.9.0",
"preact": "^8.4.2",
"preact-context": "^1.1.4",
"preact-redux": "^2.0.3",
"redux": "^4.0.1",
"ts-jest": "^24.1.0",
"ts-loader": "^4.5.0",
"typescript": "^3.5.3",
"webpack": "^4.39.1",
"webpack-cli": "^3.3.9"
typescript enzyme preact
1个回答
0
投票

AI这样回答我

在 TypeScript 中使用 Jest 运行测试时,您可能会收到错误“无法设置 [object Event] 的属性目标,它在 Function.assign 上只有一个 getter”。出现这个错误是因为事件对象的目标属性是只读的。

要修复此错误,您需要创建一个虚构的事件对象来代替真实的事件对象。为此,您可以使用 Object.assign() 方法。

这是一个如何做到这一点的例子:

const event = Object.assign({}, {
  target: {
    value: 's'
  }
});
wrapper.find('input').simulate('input', event);

在这个例子中,我们创建了一个虚拟事件对象,它的目标属性的值为:'s'。然后我们将这个虚拟对象传递给 simulate() 方法。

现在在运行测试时不应该出现错误“无法设置 [object Event] 的属性目标,它在 Function.assign 上只有一个 getter”。

© www.soinside.com 2019 - 2024. All rights reserved.