Jest.js 强制窗口未定义
Posted
技术标签:
【中文标题】Jest.js 强制窗口未定义【英文标题】:Jest.js force window to be undefined 【发布时间】:2018-12-27 18:35:12 【问题描述】:我正在使用 jest + 酶设置进行测试。如果定义了窗口,我有条件渲染某些东西的功能。
在我的测试套件中,我试图达到第二种情况,即未定义窗口,但我无法强制。
it('在没有定义窗口时做一些事情', () => 窗口=未定义; 期望(myFunction()).toEqual(thisWhatIWantOnUndefinedWinow); );但即使我强制窗口未定义,它也没有达到预期的情况,窗口总是窗口(jsdom?)
这是我的玩笑设置的问题还是我应该以另一种方式处理?
【问题讨论】:
您的答案可能会在这里***.com/questions/41885841/…如果您有任何疑问,请告知 更多的是关于替换单个方法,这对我来说是可能的,但我想让整个窗口未定义,我不能用那个解决方案来做到这一点 这可能是你的答案:***.com/questions/48691604/… 是的,这正是我所需要的,谢谢 :) 【参考方案1】:我可以使用以下模式测试未定义 window
的场景。它允许您在同一文件中运行带有和不带有window
的测试。不需要在文件顶部添加@jest-environment node
。
describe('when window is undefined', () =>
const window = global;
beforeAll(() =>
// @ts-ignore
delete global.window;
);
afterAll(() =>
global.window = window;
);
it('runs without error', () =>
...
);
);
【讨论】:
【参考方案2】:这是我在选定的 jest 测试期间强制 window
未定义的操作。
使用 window = undefined 进行测试
您可以通过在文件顶部添加@jest-environment node
来强制在某些测试文件中取消定义窗口。
test-window-undefined.spec.js
/**
* @jest-environment node
*/
// ^ Must be at top of file
test('use jsdom in this test file', () =>
console.log(window)
// will print 'undefined' as it's in the node environment
);
用窗口测试
如果您需要 window
对象,只需删除顶部的该语句即可。
credit to this answer here
【讨论】:
这个答案并不真正符合问题所在。在您的示例中,您只检查是否定义了窗口。 Jarosław Wlazło 询问如何模拟它以返回 undefined,因为 jsdom 将使 Window 可用。 @ConstantinChirila 在文件顶部使用@jest-environment node
使window
对象未定义......我会进一步改进答案
这个答案肯定对我有帮助。在编写要在节点和浏览器中运行的代码时使用它来获得 100% 的覆盖率。以上是关于Jest.js 强制窗口未定义的主要内容,如果未能解决你的问题,请参考以下文章