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

时间:2017-03-07 13:33:50

标签: javascript testing mocha 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
}

在mocha中测试时会发出警告。

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)

如果我将window.DOMParser替换为xmldom解析器以进行测试,它应该可以工作,但它不会。

知道如何让这个工作吗?

2 个答案:

答案 0 :(得分:4)

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

npm install jsdom jsdom-global --save-dev

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

<强> setup.js

require('jsdom-global')()
global.DOMParser = window.DOMParser

这将允许您从DOMParser个文件中调用src,而无需从全局对象中提取它。

文件结构

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

答案 1 :(得分:1)

更换

const parser = new DOMParser()

使用

const parser = new window.DOMParser()

诀窍。似乎JSDOM已经支持DOMParser,但是您需要在代码中显式调用window.DOMParser()才能使用它。