[英]Using DOMParser in javascript testing with mocha and 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
我猜這是因為 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
文件中或在第一次測試運行之前運行以下代碼:
設置.js
require('jsdom-global')()
global.DOMParser = window.DOMParser
這將允許您從src
文件中調用DOMParser
,而無需從全局對象中提取它。
文件結構
.
├── src
└── tests
├── setup.js
└── some-test.spec.js
更換
const parser = new DOMParser()
和
const parser = new window.DOMParser()
做到了。 似乎 JSDOM 已經支持 DOMParser 但是您需要在代碼中顯式調用 window.DOMParser() 才能使其工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.