使用测试运行器测试操纵 DOM 的函数
Using a test runner to test functions that manipulate the DOM
我最近发现了有关 Web 应用程序的端到端测试 运行 人员。他们基本上通过 运行 网络浏览器从头到尾复制用户场景。例如 NightwatchJS 和 TetsCafé。
还有像 Mocha、Jasmine、AVA、Jest、QUnit 这样的单元测试 运行ners。如果我理解正确的话,它们允许通过将返回值与已知结果进行比较来测试函数等代码单元。
如果我正在构建涉及处理文档对象的 Web 应用程序,即添加和删除元素或更改它们的位置。我可以用上面的五个单元测试 运行ners 来做这个吗?对我来说,端到端测试 运行 人员的成本似乎更高:我负担不起像单元测试那样频繁地 运行 它们,因为它们只需要更多时间。
所以我的问题是,如何测试与 DOM 交互的函数?我在 Jest 的 wiki 上找到了 this page,它解释了如何测试 JQuery 代码。但是我不知道如何测试我自己的功能(没有jQuery参与)。
例如,我有一个函数可以将新的 div
附加到文档的 body
和 returns 新创建的 div
元素。
let add = function() {
let div = createElement('div');
div.innerHTML = '<div class="newElement">Hello World</div>';
document.querySelector('body').appendChild(div)
return div
}
我怎样才能真正测试:
add()
returns HTMLElement
和 的实例
- class 名称
newElement
的 div
元素存在于 DOM.
我刚刚找到了测试一些代码的解决方案。我不认为开箱即用的 Jest 会起作用。我们实际上可以使用 document
!
访问 DOM
文件如下:
add.js:
let add = function() {
let div = document.createElement('div');
div.innerHTML = '<div class="newElement">Hello World</div>';
document.querySelector('body').appendChild(div)
return div
}
module.exports = add;
add.test.js:
const add = require('./add');
test('add() returns a HTML element', () => {
expect(add()).toBeInstanceOf(HTMLElement)
})
it('a() creates a div with class name newElement', () => {
add()
let textContent = document.querySelector('.newElement').textContent
expect(textContent).toBe('Hello World')
})
在命令行中输入 npm jest
,它 returns:
有人知道为什么会这样吗? JestJS 是否正在创建一个空文档来测试?
Jest 使用 jsdom
作为默认测试环境,因此可以立即访问常用的浏览器全局变量。
请看https://facebook.github.io/jest/docs/en/configuration.html#testenvironment-string
我最近发现了有关 Web 应用程序的端到端测试 运行 人员。他们基本上通过 运行 网络浏览器从头到尾复制用户场景。例如 NightwatchJS 和 TetsCafé。
还有像 Mocha、Jasmine、AVA、Jest、QUnit 这样的单元测试 运行ners。如果我理解正确的话,它们允许通过将返回值与已知结果进行比较来测试函数等代码单元。
如果我正在构建涉及处理文档对象的 Web 应用程序,即添加和删除元素或更改它们的位置。我可以用上面的五个单元测试 运行ners 来做这个吗?对我来说,端到端测试 运行 人员的成本似乎更高:我负担不起像单元测试那样频繁地 运行 它们,因为它们只需要更多时间。
所以我的问题是,如何测试与 DOM 交互的函数?我在 Jest 的 wiki 上找到了 this page,它解释了如何测试 JQuery 代码。但是我不知道如何测试我自己的功能(没有jQuery参与)。
例如,我有一个函数可以将新的 div
附加到文档的 body
和 returns 新创建的 div
元素。
let add = function() {
let div = createElement('div');
div.innerHTML = '<div class="newElement">Hello World</div>';
document.querySelector('body').appendChild(div)
return div
}
我怎样才能真正测试:
add()
returnsHTMLElement
和 的实例
- class 名称
newElement
的div
元素存在于 DOM.
我刚刚找到了测试一些代码的解决方案。我不认为开箱即用的 Jest 会起作用。我们实际上可以使用 document
!
文件如下:
add.js:
let add = function() {
let div = document.createElement('div');
div.innerHTML = '<div class="newElement">Hello World</div>';
document.querySelector('body').appendChild(div)
return div
}
module.exports = add;
add.test.js:
const add = require('./add');
test('add() returns a HTML element', () => {
expect(add()).toBeInstanceOf(HTMLElement)
})
it('a() creates a div with class name newElement', () => {
add()
let textContent = document.querySelector('.newElement').textContent
expect(textContent).toBe('Hello World')
})
在命令行中输入 npm jest
,它 returns:
有人知道为什么会这样吗? JestJS 是否正在创建一个空文档来测试?
Jest 使用 jsdom
作为默认测试环境,因此可以立即访问常用的浏览器全局变量。
请看https://facebook.github.io/jest/docs/en/configuration.html#testenvironment-string