将Jsdom.env迁移到新的JSDOM

时间:2018-08-17 10:20:10

标签: node.js chai jsdom

  

背景

因此,我一直通过教程来了解JS测试框架,并了解到要测试Web UI,最好使用 JSDOM 库,因为它不需要浏览器,并带来可以以无头方式执行的DOM。

对于断言库,我使用的是 Chai ,并且作为测试框架,我选择了 Mocha

  

测试用例:我想通过读取h1标签的值(即Hello World)来测试html文件,并断言为true。

import {expect} from 'chai'
import jsdom from 'jsdom'
import fs from 'fs'

describe('index.html', () => { // eslint-disable-line
  it('should say hello' , () => { // eslint-disable-line
    const index = fs.readFileSync('./src/index.html', 'utf-8')
    jsdom.env(index, function (err, window) { // eslint-disable-line
      const h1 = window.document.getElementsByTagName('h1')[0]
      expect(h1.innerHTML).to.equal('Hello World!')
      window.close()
    })
  })
})

这对于 JSDOM 包的较早版本来说可以很好地工作,但是正如我检查过JSDOM文档(即https://github.com/jsdom/jsdom)的新方法是JSDOM构造函数。

因此,我该如何迁移此测试用例以遵循JSDOM库的更新样式。

1 个答案:

答案 0 :(得分:1)

以某种方式,我设法使测试用例启动并运行。

describe('index.html', () => { // eslint-disable-line
  it('should say hello' , (done) => { // eslint-disable-line
    const options = { }
    JSDOM.fromFile('./src/index.html', options).then(dom => {
      const h1 = dom.window.document.getElementsByTagName('h1')[0]
      expect(h1.innerHTML).to.equal('Hello World!')
      done()
    }).catch(done)
  })
})