Как исправить "TypeError: window.location не является функцией"? - PullRequest
0 голосов
/ 04 января 2019

Когда я запускаю модульный тест, содержащий логику о window.location.Я получу эту ошибку на моем терминале.

TypeError: window.location [(промежуточное значение) (промежуточное значение) (промежуточное значение)] не является функцией

      35 |   localVue.use(VueRouter);
    > 36 |   const router = new VueRouter(...routerOptions);
      37 | 
      38 |   Object.keys(filters).forEach(key => {
      39 |     localVue.filter(key, filters[key]);

Моя единица выборкитестовый код, содержащий только логику относительно window.location

   beforeEach(() => {
      global.window = Object.create(window);
      const url = "http://localhost.com";
      Object.defineProperty(window, "location", {
        value: {
          href: url
        },
        writable: true
      });
    });

Кто-нибудь встречался с такой ситуацией ?.Мне действительно нужна помощь в этом случае.

1 Ответ

0 голосов
/ 04 января 2019

В jest.config.js вы можете добавить установочные файлы , которые указывают на файл с некоторой пользовательской конфигурацией.Там вы можете объявить методы и свойства для объекта window.Например, ваш jest.config.file может выглядеть следующим образом:

module.exports = {
  ...
  'setupFiles': ['./tests/unit/config.main.js'],
  ...
}

А затем в /tests/unit/config.main.js (или любом другом пути) вы просто добавляете:

window.location = { value: { href: "http://localhost/" }};

В моем собственном установочном файле у меня также есть window помощники, например:

window.alert = (msg) => { console.log(msg); };
window.matchMedia = () => ({});
window.scrollTo = () => { };

Так что код в вашем приложении, который вызывает эти window методы, не нарушает тест.

(на самом деле я никогда не пытался настроить window.location в установочном файле, но это должно работать прямо).

...