Как я могу установить окно на неопределенное, чтобы проверить рендеринг SSR в изоморфном приложении? - PullRequest
0 голосов
/ 04 января 2019

Я пытался проверить блок else, когда окно не определено. Поскольку я использую Next.js, окно будет неопределенным во время рендеринга на стороне сервера (SSR). В настоящее время я не могу найти способ сделать это.

Любая помощь очень ценится.

Я попытался установить window = undefined и global.window = undefined в тесте и в определении перед функцией (как для всех, так и для каждого параметра). Оба подхода не увенчались успехом.

При поиске в Google ближайший ответ, который я могу найти, это издеваться или шпионить за окном, но это не решает мою проблему. Я также обнаружил, что люди отмечают, что вы можете запустить тест как приложение Node (то есть SSR), но не знаете, как это можно сделать для одного теста.

Ниже приведен пример того, что я пытаюсь проверить и как.

Функция для проверки

export default () => {
   console.log(typeof window); // This is always an object and never undefined
   const language =
      typeof window !== 'undefined'
          ? window.navigator.userLanguage || window.navigator.language || 'en'
          : 'en';

   return language;
};

Jest Test

import getLanguage = './getLanguage';

describe('Get Language SSR', () => {
    const realWindow = window;

    beforeAll(() => {
        window = undefined;
    });

    afterAll(() => {
        window = realWindow;
    });

    it('should return "en"', () => {
         expect(getLanguage()).toEqual('en');
    })
});

Покрытие кода показывает, что блок else никогда не срабатывает.

1 Ответ

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

"Добавляя док-блок @ jest-environment вверху файла, вы можете указать другую среду, которая будет использоваться для всех тестов в этом файле" :

/**
 * @jest-environment node
 */

import getLanguage from './getLanguage';

describe('Get Language SSR', () => {

  it('should return "en"', () => {
    expect(getLanguage()).toEqual('en');  // SUCCESS
  })

});

В блоке @jest-environment будет задана среда тестирования для этого тестового файла - node, в результате чего window будет undefined, что приведет к прохождению теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...