javascript - 如何在 Mocha 单元测试中模拟 document.evaluate() 和 XPathResult?

标签 javascript dom xpath mocha.js jsdom

我有以下 JavaScript 类包装 document.evaluate() 使用 XPath 选择 DOM 元素:

'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
class ElementByXPath {
  constructor(elementXPath) {
    this.elementXPath = elementXPath
  }
  element(document) {
    return document.evaluate(
      this.elementXPath,
      document.documentElement,
      null,
      XPathResult.FIRST_ORDERED_NODE_TYPE,
      null,
    ).singleNodeValue
  }
}
exports.ElementByXPath = ElementByXPath

以下用 mocha 编写的测试将验证方法 element():

describe('ElementByXPath function test', () => {
  it('should return element of given XPath', () => {
    const dom = new JSDOM(`<p id = "test-id"/p>`)
    const result = new ElementByXpath('//*[@id="test-id"]').element(
      dom.window.document,
    )

    expect(result.tagName).to.equal('P')
  })
})

使用JSDOM我能够模拟 window 元素。不幸的是,我无法模拟 XPathResult:

ReferenceError: XPathResult is not defined

有人可能有提示吗?谢谢。

最佳答案

jsdom 旁边添加 jsdom-global (描述 here ):

npm i -D jsdom jsdom-global

mocha执行测试时注册jsdom-global

mocha -r jsdom-global/register test/**/*.test.js

关于javascript - 如何在 Mocha 单元测试中模拟 document.evaluate() 和 XPathResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60233741/

相关文章:

Python + Selenium WebDriver - 如果同级包含字符串,则获取 div 值

xml - xslt 中无法识别 xpath 函数

javascript - 将 MongoDB 文档字段合并到一个文档中

javascript - 消失的节点值

javascript - 使用 jQuery 删除 <link> 元素?

c++ - 如何在QtWebKit中访问网页的DOM?

java - 将 xpath 与 java 类中的命名空间一起使用

javascript - echarts.js中缺失数据置零

javascript - 替换 html 中的文本并保留事件

javascript - Dom 对象宽度最小为 320