Javascript 我可以用JSDOM欺骗instanceof吗?
我有一个要测试的react类,该类在开始时有以下if检查:Javascript 我可以用JSDOM欺骗instanceof吗?,javascript,reactjs,jsdom,Javascript,Reactjs,Jsdom,我有一个要测试的react类,该类在开始时有以下if检查: if(!(window.HTMLElement的根实例)){ 抛出新错误('未提供HTML元素]; } 我试图用jsdom传入一个伪元素,但它并没有“愚弄”check的实例 const doc=(new JSDOM()).window.document; const root=doc.createElement(“div”); const pizza=新构建器(根); 期望(披萨)被定义; 我已经看过了什么被传进来了 if (!(r
if(!(window.HTMLElement的根实例)){
抛出新错误('未提供HTML元素];
}
我试图用jsdom
传入一个伪元素,但它并没有“愚弄”check的实例
const doc=(new JSDOM()).window.document;
const root=doc.createElement(“div”);
const pizza=新构建器(根);
期望(披萨)被定义;
我已经看过了什么被传进来了
if (!(root instanceof window.HTMLElement)) {
console.log(Object.prototype.toString.call(root));
console.log(typeof window.HTMLElement)
console.log(typeof root)
throw new Error('No HTML element was supplied. );
}
它看起来一点也不像window.HTMLElement:
console.log src/main.jsx:20
[object HTMLDivElement]
console.log src/main.jsx:21
function
console.log src/main.jsx:22
object
如何模拟
窗口.HTMLElement
以便测试此类?您可以通过将窗口的属性指定为全局的属性来模拟这些属性。在分配全局属性和使用它创建元素之间,JSDOM
的实例需要相同,否则HTMLElement
的实例也会不同。为了克服这个限制,我们将其引用为在每个
之前的中设置的单个变量jsDomInstance
,而不是实例化多个副本
const{JSDOM}=require('JSDOM')
常量{instanceofCheck}=require('./instanceofCheck')
//const instanceofCheck=x=>x instanceof window.HTMLElement
描述('JSDOM测试',()=>{
让我们来证明一下
在每个之前(()=>{
jsDomInstance=newjsdom()
global.HTMLElement=jsDomInstance.window.HTMLElement
})
它('通过检查实例',()=>{
期待(
InstanceOffCheck(
jsdoInstance.window.document.createElement('div'))
)
).托比(对)
})
})
您的测试工具是什么。?Ezyme,RTL+Jest…?HTMLElement
继承自HTMLElement
,因此任何HTMLElement的实例都应该是HTMLElement的实例。不太清楚您的问题是什么?@Yevgen Ezyme和Jest,但它们都没有在提供的代码中引起问题。我问,因为我不明白您为什么要做上述操作(因为对于基本测试组件是否呈现,有一个较短的路径)以及JSDOM的用途是什么?@Yevgen较短的路径是什么?