Как смоделировать / протестировать слушателей событий с помощью mocha / jest? - PullRequest
2 голосов
/ 27 марта 2019
class Router {
    constructor() {
        window.onhashchange = this.hashChange;
    }

    hashChange() {
        console.log('Hash Changed');
        return true;
    }
}

export default Router;

Я пытаюсь найти способ протестировать приведенный выше фрагмент кода в node.js.Но в узле нет объекта window.Как макетировать объекты и тестировать слушателей событий, используя mocha / jest?Цель состоит в том, чтобы проверить, что hashChange() вызывается при изменении хэша URL

1 Ответ

1 голос
/ 27 марта 2019

Среда тестирования по умолчанию в 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!
});
...