【问题标题】:Jsdom.env to new JSDOM , migrationJsdom.env 到新的 JSDOM ,迁移
【发布时间】:2018-08-17 10:20:09
【问题描述】:

背景

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

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

测试用例:我想通过读取其 h1 标记的值来测试一个 html 文件,即在这种情况下为 Hello World,我会将其断言为 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 库的更新样式。

【问题讨论】:

  • 我建议切换到Jest,因为它基本上是为您预先配置的 Mocha + Chai + JSDOM。
  • @AKX 感谢您的推荐,但现在我想了解一些基本的东西,然后会使用像 Jest 这样的脚手架测试框架。如果你能帮助我了解 JSDOM 的新语法,我会很棒。

标签: node.js chai jsdom


【解决方案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)
  })
})

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2017-03-27
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多