Как проверить addEventListener в Mocha / Chai / Sinon с vanillajs и nodejs? - PullRequest
0 голосов
/ 11 июля 2019

У меня проблема с Mocha, тестирующим EventListener, который проверяет ввод. Моя среда с простым javascript, nodejs и mocha / chai / sinon для тестирования. Я написал несколько других тестов, которые работают, в основном, проверяя функции, но тесты обращаются к «Не удается прочитать свойство 'addEventListener' из null".

Поскольку я довольно новичок в тестировании, я покопался в документации, добавил JSDOM и все такое, но не повезло. Я просто не знаю, как проверить список событий. Многие из уже доступных потоков - это среды React, в которых, похоже, есть какие-то встроенные приложения, которые помогают им, но не мне.

Так что это, в сущности, сужается:

const userInput = document.querySelector("#userInfo");
userInput.addEventListener("input", changeContent);

Он проверяет пользовательский ввод, а в методе changeContent он просто проверяет длину и т. Д. Любой желающий о том, как я должен это сделать?

Edit: Небольшой обходной путь, который «пропускает» мою проблему, но было бы неплохо узнать, как решить ее в тесте в любом случае. При этом тест проходит (потому что он игнорирует его).

Обходной путь, поскольку тест указывает EventListener на ноль:

if(userInput){
  userInput.addEventListener("input", changeContent)
}

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете использовать spy, чтобы проверить, вызывается ли addEventListener. Нет конкретных причин для проверки реализации addEventListener.

Также вы должны подделать document.querySelector и заставить его вернуть элемент HTMLE.

Короче говоря:

Используйте шпиона для addEventListener: https://sinonjs.org/releases/v7.3.2/spies/

Использовать подделки для document.querySelector: https://sinonjs.org/releases/v7.3.2/

Пример шпиона для console.log:

// method implementend in your project
function log() {
   console.log('Hello world');

}

// log.spec.ts

...
describe('whatever test suite', () => {
    it('test log', () => {
        const consoleSpy = Sinon.spy(console, 'log');
        log();

        Sinon.assert.calledWith(consoleSpy, 'Hello world');
    });
});
...
...