在完美的世界代码库中,不需要操作全局对象,但是世界代码库很混乱 - 测试也是如此。
您要不惜一切代价避免一个测试影响另一个测试。无论顺序如何,或者是否跳过某些测试,测试都应该有意义。
模拟值的一种简单方法是将属性设置为测试中所需的任何值。
只要您更改此特定测试拥有(创建)的本地对象中的值就可以了:
如果你对全局对象这样做,它会变得混乱:
这就是 jest.replaceProperty() 的用途:
方法可以像属性一样被模拟。
如果你在全局对象上使用 myObject.someFunction = jest.fn() ,你的测试可能会相互依赖并失去它们的意义:
我们应该如何模拟全局对象中的方法?这就是 jest.spyOn() 的好处:
如果你想确保所有测试都发现系统处于相同(新鲜、干净)状态,则需要在每次测试后恢复模拟的状态。
最简单的解决方案是设置restoreMocks配置属性。
最直接的选择是在 afterEach() 中调用 jest.restoreAllMocks()
有时您想模拟文件中所有测试的内容。如果您在顶层或在describe()块中使用jest.spyOn()和jest.replaceProperty(),则在执行第一个测试后,所有Mock将被重置。
在顶层,您可以安全地重写属性和方法,无需 jest.spyOn() 和 jest.replaceProperty()。
如果您只想为describe() 块模拟事物,则需要在beforeEach() 挂钩中进行这些调用。
以上是笑话回顾:安全模拟全局对象的属性和方法的详细内容。更多信息请关注PHP中文网其他相关文章!