Javascript 如何处理影响Jest中其他测试的全局对象/测试
我在React原生项目中的一些测试会影响全局对象。这些更改通常会影响依赖于相同对象的其他测试 例如:一个测试检查是否正确添加了侦听器,第二个测试检查是否正确删除了侦听器:Javascript 如何处理影响Jest中其他测试的全局对象/测试,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,我在React原生项目中的一些测试会影响全局对象。这些更改通常会影响依赖于相同对象的其他测试 例如:一个测试检查是否正确添加了侦听器,第二个测试检查是否正确删除了侦听器: /\uuuuuu测试/ExampleClass.js 描述(“示例类”,()=>{ 它(“应该添加侦听器”,()=>{ 例如class.addListener(jest.fn()); 例如class.addListener(jest.fn()); expect(例如class.listeners.length).toBe(2)
/\uuuuuu测试/ExampleClass.js
描述(“示例类”,()=>{
它(“应该添加侦听器”,()=>{
例如class.addListener(jest.fn());
例如class.addListener(jest.fn());
expect(例如class.listeners.length).toBe(2);
});
它(“应该删除侦听器”,()=>{
const fn1=jest.fn();
const fn2=jest.fn();
示例class.addListener(fn1);
示例class.addListener(fn2);
expect(例如class.listeners.length).toBe(2);
示例类RemovelListener(fn1);
expect(ExampleClass.listeners.length).toBe(1);
示例类RemovelListener(fn2);
expect(ExampleClass.listeners.length).toBe(0);
});
});
第二个测试本身可以正常运行,但在运行所有测试时失败,因为第一个测试没有清理ExampleClass。在每次测试中,我总是需要手动清理类似的东西吗
看来我不明白这个范围是如何运作的。。。我假设每个测试都将在一个新的环境中运行。有关于这方面的文件吗
其他示例包括模拟外部库并检查其中模拟的函数是否被正确调用,或者将
Platform.OS
覆盖到ios或android以测试特定于平台的实现。据我所知,测试的范围始终是测试文件。现在,我将代码更改为在每次回调之前有一个,该回调主要调用jest.resetAllMocks()
并将Platform.OS
重置为其默认值
快速和沙盒
Jest将测试运行并行化,以最大限度地提高性能。控制台消息被缓冲并与测试结果一起打印。沙盒测试文件和自动全局状态为每个测试重置,因此没有两个测试相互冲突
就我所见,测试的范围始终是测试文件。现在,我将代码更改为在每次
回调之前有一个,该回调主要调用jest.resetAllMocks()
并将Platform.OS
重置为其默认值
快速和沙盒
Jest将测试运行并行化,以最大限度地提高性能。控制台消息被缓冲并与测试结果一起打印。沙盒测试文件和自动全局状态为每个测试重置,因此没有两个测试相互冲突