Имитировать щелчок (в узле) для ванильного JS, используя мокко и чай? - PullRequest
1 голос
/ 17 апреля 2019

Я использую Мокко и Чай для юнит-тестирования.

Теперь я хочу смоделировать событие нажатия на элемент. В обычной среде dom вы можете использовать метод .click () Как показано здесь: 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);

  });
});

Пока мой поиск показал несколько разных вариантов:

  • энзим Попробовал, для работы потребуется адаптер реакции. Кажется излишним, так как я хочу проверить vanillaJS?
  • simulant При реализации я не получаю сообщение об ошибке: ReferenceError: window is not defined. Даже когда я реализую что-то вроде jsdom-global (что делает объект окна доступным в Node env) Можно ли это использовать только в среде браузера?
  • селен Это кажется довольно многословным.
  • кукловод Это выглядит многообещающе для варианта использования. Однако совместимо ли это с JSDOM?

Что я должен использовать для имитации события щелчка для vanilla JS?


Обновление:

Установка JSDOM опасно работает. Однако, как следует из названия, «опасно» предполагает риск. (источник)

Просто запускать ваши сценарии в среде узлов (и в этом отношении в CI) не кажется желательным.

...