Javascript Jest模拟窗口对象

Javascript Jest模拟窗口对象,javascript,mocking,jestjs,server-side-rendering,Javascript,Mocking,Jestjs,Server Side Rendering,如何模拟未定义的窗口 这将帮助我测试SSR的一些场景 是 Object.defineProperty() 一个解决方案,不太确定我怎么能嘲笑它 提前感谢您的帮助。是的,Object.defineProperty()是一个解决方案 例如 index.ts: 函数main(){ 返回窗口; } 导出默认主; index.test.ts: import main from'; 描述('60152407',()=>{ 它('应该返回窗口',()=>{ expect(main()).toBeDefi

如何模拟未定义的窗口

这将帮助我测试SSR的一些场景

Object.defineProperty()
一个解决方案,不太确定我怎么能嘲笑它




提前感谢您的帮助。

是的,
Object.defineProperty()
是一个解决方案

例如

index.ts

函数main(){
返回窗口;
}
导出默认主;
index.test.ts

import main from';
描述('60152407',()=>{
它('应该返回窗口',()=>{
expect(main()).toBeDefined();
});
它('应该模拟未定义的窗口',()=>{
defineProperty(全局,'window',{value:undefined});
expect(main()).toBeUndefined();
});
});
单元测试结果和覆盖率报告:

PASS stackoverflow/60152407/index.test.ts
60152407
✓ 应返回窗口(2ms)
✓ 模拟窗口是否应未定义(1ms)
----------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
----------|---------|----------|---------|---------|-------------------
所有文件| 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:3.792s,估计5s
jest.config.js

module.exports={
预设:'ts jest/presets/js with ts',
测试环境:“酶”,
setupFilesAfterEnv:['jest-enzyme','./jest.setup.js'],
测试匹配:['**/?(*)+(规范测试)。[jt]s?(x)],
没错,
};

源代码:

您知道如何在设置窗口后恢复它吗?之后的任何测试都会失败,因为未定义窗口。