Я пытался проверить блок 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 никогда не срабатывает.