我正在使用Mocha和Chai进行单元测试。
现在,我要模拟元素上的click事件。在常规的dom环境中,您可以使用.click() method,如下所示:https://jsfiddle.net/Spindle/jwyx6L84/
但是,由于测试是在Node环境中运行的,因此显然无法正常工作。
以下是测试方案示例:
import { describe } from 'mocha';
const expect = require('chai').expect;
const jsdom = require('jsdom');
const { JSDOM } = jsdom;
describe('example...', function() {
beforeEach(function() {
const { window } = new JSDOM(`
<!doctype html><html>
<button class="trigger" onclick="this.classList.add('test-class')">
</button>
</html>`, { runScripts: "dangerously" });
// setting it to dangerously works...
global.window = window;
});
it(`click event should be fired`, function() {
const triggerElement = window.document.getElementsByClassName('trigger')[0];
triggerElement.click();
expect(triggerElement.classList.contains('test-class')).to.equal(true);
});
});
到目前为止,我的搜索显示了几个不同的选项:
ReferenceError: window is not defined
。即使我实现了jsdom-global之类的东西(这使window对象在Node env中可用)也只能在浏览器环境中使用吗?我应该使用什么来模拟Vanilla JS的点击事件?
更新:
将JSDOM设置为危险地工作。但是,正如“危险地”的名称所暗示的那样,存在风险。 (source)
似乎不希望仅在节点环境中(以及在CI中)运行脚本。