我如何模拟“instanceof”测试?

How can I mock an `instanceof` test?

在我的 React 代码中,我侦听 FocusEvent,并检查正在聚焦的元素的类型:

function onBlur(event) {
    if(event.relatedTarget instanceof HTMLInputElement) { /* ... */ }
}

这很好用。我只是似乎无法为它编写适当的单元测试......我想我可以按如下方式调用 onBlur 方法:

onBlur({ relatedTarget: new HTMLInputElement() });

...但不幸的是,这会导致错误:

TypeError: Illegal constructor

如果重要的话,我正在使用 Jest 和 Enzyme(我认为它使用 jsdom?)。

如何最好地解决这个问题?

使用这个你可以模拟你的元素:

var a = document.createElement('input')
a instanceof HTMLInputElement // returns true

如果您需要添加更多行为,那么您可以将其添加到对象 a 中。

这将计算为 true:

document.createElement('input') instanceof HTMLInputElement

另一种方法是更改​​测试输入元素的方式。您可以使用 tagName 应该是 'INPUT' string:

function onBlur(event) {
    if(event.relatedTarget.tagName === 'INPUT') { /* ... */ }
}

onBlur({ relatedTarget: {tagName: 'INPUT'} });