使用mocha和chai模拟香草JS的点击(在节点中)?

时间:2019-04-17 09:15:45

标签: javascript mocha chai jsdom

我正在使用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);

  });
});

到目前为止,我的搜索显示了几个不同的选项:

  • enzyme尝试过此操作,它将需要一个React适配器才能工作。自从我想测试vanillaJS以来,似乎是一种过大的杀伤力?
  • simulant在实施过程中,我没有遇到错误:ReferenceError: window is not defined。即使我实现了jsdom-global之类的东西(这使window对象在Node env中可用)也只能在浏览器环境中使用吗?
  • selenium这似乎很冗长。
  • puppeteer对于用例而言,这似乎很有希望。但是,这与JSDOM兼容吗?

我应该使用什么来模拟Vanilla JS的点击事件?


更新:

将JSDOM设置为危险地工作。但是,正如“危险地”的名称所暗示的那样,存在风险。 (source)

似乎不希望仅在节点环境中(以及在CI中)运行脚本。

0 个答案:

没有答案