Javascript 如何将window设置为undefined,以便在同构应用程序中测试SSR渲染?

Javascript 如何将window设置为undefined,以便在同构应用程序中测试SSR渲染?,javascript,jestjs,isomorphic-javascript,Javascript,Jestjs,Isomorphic Javascript,我一直在尝试在窗口未定义时测试else块。 当我使用Next.js时,在服务器端渲染(SSR)期间窗口将是未定义的。目前我找不到这样做的方法 非常感谢您的帮助 我已尝试在测试中和函数之前的定义中设置window=undefined和global.window=undefined(所有选项和每个选项)。这两种方法都没有成功 在谷歌搜索时,我能找到的最接近的答案是模仿或监视窗口方法,但这并不能解决我的问题。我还发现有人注意到可以将测试作为节点应用程序(因此是SSR)运行,但不确定如何为一个测试执行此

我一直在尝试在窗口未定义时测试else块。 当我使用Next.js时,在服务器端渲染(SSR)期间窗口将是未定义的。目前我找不到这样做的方法

非常感谢您的帮助

我已尝试在测试中和函数之前的定义中设置
window=undefined
global.window=undefined
(所有选项和每个选项)。这两种方法都没有成功

在谷歌搜索时,我能找到的最接近的答案是模仿或监视窗口方法,但这并不能解决我的问题。我还发现有人注意到可以将测试作为节点应用程序(因此是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;
};
import getLanguage = './getLanguage';

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

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

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

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

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;
};
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块从未被命中

@jest-environment
docblock将此测试文件的测试环境设置为
节点
,导致
窗口
未定义,并导致测试通过