在我的React代码中,我监听FocusEvent,并检查正在聚焦的元素的类型:
function onBlur(event) {
if(event.relatedTarget instanceof HTMLInputElement) { /* ... */ }
}
这很好用。我只是似乎无法为它编写适当的单元测试...我想我可以按如下方式调用onBlur
方法:
onBlur({ relatedTarget: new HTMLInputElement() });
...但遗憾的是,这会导致错误:
TypeError: Illegal constructor
我正在使用Jest和Enzyme(我认为使用jsdom?),如果这很重要的话。
如何最好地接近这个?
答案 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'} });