Как издеваться над PerformanceObserver с помощью Jest - PullRequest
2 голосов
/ 21 февраля 2020

У меня есть некоторый код, где я создаю PerformanceObserver в конструкторе, и я пытаюсь выяснить, как его смоделировать, чтобы я мог утверждать, что observe вызывается для наблюдателя, а также эмулировать запись производительности, являющуюся сгенерированный, который будет вызывать обратный вызов и утверждать, что обратный вызов действительно был вызван. Код в конструкторе выглядит следующим образом:

    const { _tracking } = props;

    this.resourceObserver = new PerformanceObserver((list) => {
      const resourceEntries = list.getEntriesByType(
        'resource',
      ) as PerformanceResourceTiming[];

      for (const resource of resourceEntries) {
        resourceObserverCallback(_tracking, resource);
      }
      performance.clearResourceTimings();
    });
    this.resourceObserver.observe({ entryTypes: ['resource'] });

У кого-нибудь есть предложения?

РЕДАКТИРОВАТЬ:

Я могу утверждать, что observe вызывается на наблюдателя создавая createResourceObserver функцию, которая возвращает либо переданную имитацию, либо реальную PerformanceObserver, которая решает часть проблемы, но я все еще не уверен, как использовать наблюдателя в тесте.

Вот как выглядит функция:

createResourceObserver() {
    const { _mockObserver, _tracking } = this.props;

    if (_mockObserver) {
      return _mockObserver;
    }

    const observer = new PerformanceObserver((list) => {
      const resourceEntries = list.getEntriesByType(
        'resource',
      ) as PerformanceResourceTiming[];

      for (const resource of resourceEntries) {
        resourceObserverCallback(_tracking, resource);
      }
      performance.clearResourceTimings();
    });
    return observer;
  }
...