在摩卡和JSDOM的JavaScript测试使用的DOMParser

Rii*_*ina 3 javascript testing mocha.js jsdom sinon

我有一个问题,测试使用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
}
Run Code Online (Sandbox Code Playgroud)

在摩卡咖啡中测试时会发出警告。

node:22883) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: DOMParser is not defined
Run Code Online (Sandbox Code Playgroud)

我猜这是因为在节点没有的DOMParser。我该如何解决?我尝试过各种事情,例如

var DOMParser = require('xmldom').DOMParser
sinon.stub(window, 'DOMParser', DOMParser)
Run Code Online (Sandbox Code Playgroud)

想,如果我有XMLDOM解析器它应该工作测试替代window.DOMParser,但事实并非如此。

任何想法如何得到这个工作?

Dov*_*ski 5

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

npm install jsdom jsdom-global --save-dev
Run Code Online (Sandbox Code Playgroud)

然后确保在setup.js文件中或在第一个测试运行之前运行以下代码:

setup.js

require('jsdom-global')()
global.DOMParser = window.DOMParser
Run Code Online (Sandbox Code Playgroud)

这将允许您DOMParsersrcs文件中进行调用,而无需从全局对象中提取文件。

档案结构

.
??? src
??? tests
    ??? setup.js
    ??? some-test.spec.js
Run Code Online (Sandbox Code Playgroud)


Rii*_*ina 4

更换

const parser = new DOMParser()
Run Code Online (Sandbox Code Playgroud)

const parser = new window.DOMParser()
Run Code Online (Sandbox Code Playgroud)

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