Я использую Мокко и Чай для юнит-тестирования.
Теперь я хочу смоделировать событие нажатия на элемент. В обычной среде 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) не кажется желательным.