#javascript #testing #mocha.js #jestjs
#javascript #тестирование #mocha.js #jestjs
Вопрос:
class Router {
constructor() {
window.onhashchange = this.hashChange;
}
hashChange() {
console.log('Hash Changed');
return true;
}
}
export default Router;
Я пытаюсь найти способ протестировать приведенный выше фрагмент кода в node.js . Но в node нет window
объекта. Как имитировать объекты и тестировать прослушиватели событий с помощью mocha / jest? Цель состоит в том, чтобы проверить, что hashChange()
вызывается при изменении хэша URL
Ответ №1:
Тестовая среда по умолчанию в Jest
— это среда, подобная браузеру, предоставляемая jsdom
.
jsdom
обеспечивает, window
поэтому он доступен по умолчанию для тестов, выполняемых в Jest
.
Вы можете использовать Jest
для тестирования приведенного выше кода следующим образом:
class Router {
constructor() {
window.onhashchange = this.hashChange;
}
hashChange() {
console.log('Hash Changed');
return true;
}
}
test('Router', () => {
const hashChangeSpy = jest.spyOn(Router.prototype, 'hashChange');
const router = new Router();
window.onhashchange();
expect(hashChangeSpy).toHaveBeenCalled(); // Success!
});
Комментарии:
1.
The default test environment in Jest is a browser-like environment provided by jsdom
Итак, нужно ли мне добавлять jsdom в мой package.json? или это поставляется с jest?2. @lch он включен в jest и используется автоматически с настройками конфигурации по умолчанию