使用mocha和JSDOM在javascript测试中使用DOMParser

使用mocha和JSDOM在javascript测试中使用DOMParser,javascript,testing,mocha.js,sinon,jsdom,Javascript,Testing,Mocha.js,Sinon,Jsdom,我在测试一些使用window.DOMParser的javascript时遇到问题 const stripLink = (url) => { const parser = new DOMParser() const link = parser.parseFromString(unescape(url), 'text/html').querySelector('a') return link ? link.getAttribute('href') : url } 在摩卡进行测试

我在测试一些使用window.DOMParser的javascript时遇到问题

const stripLink = (url) => {
  const parser = new DOMParser()
  const link = parser.parseFromString(unescape(url), 
'text/html').querySelector('a')
  return link ? link.getAttribute('href') : url
}
在摩卡进行测试时,会发出警告

node:22883) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: DOMParser is not defined
我猜这是因为节点中没有DOMParser。我该怎么做?我试过各种方法,比如

var DOMParser = require('xmldom').DOMParser
sinon.stub(window, 'DOMParser', DOMParser)
认为如果我用xmldom解析器替换window.DOMParser进行测试,它应该可以工作,但实际上不行

你知道怎么做吗?

更换

const parser = new DOMParser()


成功了。JSDOM似乎已经支持DOMParser,但是您需要在代码中显式调用window.DOMParser(),它才能工作。

更新:2020/12/02

对于现代版本的
js
,不再需要安装依赖项。使用
global.DOMParser=window.DOMParser
就足够了。谢谢

原始答案

还有另一个类似的解决方法。您需要安装以下软件包:

npm install jsdom jsdom-global --save-dev
然后确保在
setup.js
文件中或在第一次测试运行之前运行以下代码:

setup.js

require('jsdom-global')()
global.DOMParser = window.DOMParser
这将允许您从
src
s文件中调用
DOMParser
,而无需从全局对象中提取它

文件结构

.
├── src
└── tests
    ├── setup.js
    └── some-test.spec.js

现在,只要setup.js中的
global.DOMParser=window.DOMParser
没有依赖项就足够了。@TonyGentilcore刚刚根据您的评论进行了更新。谢谢
.
├── src
└── tests
    ├── setup.js
    └── some-test.spec.js