Jest тестирование с использованием объекта URL - PullRequest
0 голосов
/ 23 марта 2020

У меня есть случай, когда мой код использует URL API, созданный так:

const _url = new URL(window.location.href);

и используется так:

if (_url.searchParams.get('locale')) {
    do something
}

Однако в моих шутливых тестах я получаю сообщение об ошибке:

TypeError: Cannot read property 'get' of undefined

Я пытался глобально насмехаться, делая это в моем установочном файле:

global.URL = jest.fn(() => {
  return {
    searchParams: jest.fn(() => {
      return {
        get: jest.fn(() => {
          return '';
        }),
      };
    }),
  };
});

Но это не не похоже на работу. Глядя на записанный в консоль вывод моего _url объекта, кажется, что все вместе отсутствует свойство searchParam:

URL {
  [Symbol(impl)]: URLImpl {
    _url: {
      scheme: 'http',
      username: '',
      password: '',
      host: 'localhost',
      port: null,
      path: [Array],
      query: null,
      fragment: null,
      cannotBeABaseURL: false
    },
    [Symbol(wrapper)]: [Circular]
  }
}

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 23 марта 2020

Мне удалось решить эту проблему, выполнив глобальный макет в установочном файле следующим образом:

global.URL = (() => {
  return {
    searchParams: {
      get: jest.fn((param) => {
        const reg = `[?&]${param}=([^&]*)`;
        return (window.location.search.match(reg) && window.location.search.match(reg)[1]) ? window.location.search.match(reg)[1] : '';
      }),
    },
  };
});
...