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