簡體   English   中英

在 mocha 和 JSDOM 的 javascript 測試中使用 DOMParser

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM