如何使用jsdom来测试函数' document'

时间:2017-07-25 18:47:23

标签: javascript typescript mocha chai jsdom

我有一个小问题..我正在尝试测试我创建的一些函数(用Typescript编写),我正在使用mocha / chai / jsdom。现在,我在使用' document'测试功能时遇到错误。在文档内..我收到消息' ReferenceError:文档未定义'。我怎么能用'文件'来测试这些功能?在它?

例如:

[prompt.spec.ts]

import { expect } from 'chai'
import { JSDOM } from 'jsdom'
import { functionX } from './functions'

describe('Functions', () => {
  it('is possible to execute functionX with simple parameters', () => {
    const jsdom = new JSDOM()
    const htmlElement = jsdom.window.document.createElement('div')
    expect(functionX(htmlElement, function() { return true; } )).to.equal(true)
  })
})

[functions.ts]

export const functionX = (
    body:HTMLElement, callback: (ok: boolean) => void
) => {
    const doc = body.ownerDocument
    const parent = doc.body

    // ...

    let container = document.querySelector('.container') as HTMLDivElement  //  ReferenceError: document is not defined

}

1 个答案:

答案 0 :(得分:2)

如果您事先做好准备,可以将JSDOM的文档全局提供给您的测试。

import { JSDOM } from 'jsdom';
const { window } = new JSDOM('<!doctype html><html><body></body></html>');

// Save these two objects in the global space so that libraries/tests
// can hook into them, using the above doc definition.
global.document = window.document;
global.window = window;

将其写入单独的文件,并将该文件作为参数添加到spec文件之前的mocha中。类似的东西:

_mocha Specs/_setup.js Specs/*.js