Javascript 我可以用JSDOM欺骗instanceof吗?

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

我有一个要测试的react类,该类在开始时有以下if检查:

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较短的路径是什么?