Как смоделировать document.evaluate () и XPathResult в модульном тесте мокко? - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть JavaScript обтекание класса document.evaluate() выбора элемента DOM с использованием XPath:

'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

Кто-то может намекнуть? Спасибо.

1 Ответ

0 голосов
/ 17 февраля 2020

Добавить jsdom-global рядом с jsdom (описано здесь ):

npm i -D jsdom jsdom-global

Регистрация jsdom-global, когда mocha выполняет тесты

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