我在测试一些使用 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

我猜这是因为 node.js 中没有 DOMParser 。我该如何解决这个问题?我试过各种各样的东西,比如
var DOMParser = require('xmldom').DOMParser
sinon.stub(window, 'DOMParser', DOMParser)

认为如果我用 xmldom 解析器替换 window.DOMParser 进行测试,它应该可以工作,但它没有。

知道如何让这个工作吗?

最佳答案

更新:2020/12/02
对于 js 的现代版本,不再需要安装依赖项。使用 global.DOMParser = window.DOMParser 应该就足够了。谢谢 @tony-gentilcore
原始答案
还有另一个类似的解决方法。您需要安装以下软件包:

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

关于javascript - 在 mocha 和 JSDOM 的 javascript 测试中使用 DOMParser,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42649700/

10-10 00:24