我怎么能模拟`instanceof`测试?

时间:2017-08-30 08:02:56

标签: javascript reactjs dom jestjs jsdom

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

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

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

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

...但遗憾的是,这会导致错误:

TypeError: Illegal constructor

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

如何最好地接近这个?

3 个答案:

答案 0 :(得分:2)

使用此功能可以模拟您的元素:

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

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

答案 1 :(得分:1)

这将评估为true

document.createElement('input') instanceof HTMLInputElement

答案 2 :(得分:0)

另一种方法是改变测试输入元素的方法。您可以使用tagName,这应该是' INPUT'字符串:

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

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