Bry*_*yan 5 javascript testing mocking jestjs
我有两个测试,看起来像:
import someThing from '../someThing';
jest.mock('../someThing');
describe('group', () => {
it('test #1', async () => {
someThing.someFunction.mockImplementation(() => 123);
});
it('test #2', async () => {
someThing.someFunction.mockImplementation(() => 456);
});
});
Run Code Online (Sandbox Code Playgroud)
我看到一个问题,第二个测试中似乎调用了第一个测试中的模拟实现。如果我禁用测试#1 测试#2 按预期工作。(我的实际代码比这更复杂)。
我需要为两者进行单独的模拟的原因是,在给定相同输入的情况下,一个应该返回失败结果,一个应该返回成功结果。
据我了解,JEST 并行运行所有测试,因此我假设发生的情况是两个测试同时修改了模拟实现,因为它是相同的导入。
实际上从来不希望测试相互影响。
根据经验,Jest 间谍需要在测试之间恢复到原始状态:
beforeEach(() => {
jest.restoreAllMocks();
jest.clearAllMocks();
});
Run Code Online (Sandbox Code Playgroud)
restoreMocks或者最好使用 Jest和配置选项无条件应用于所有测试clearMocks。
不这样做会导致测试交叉污染。
解决方法是使用*Once方法,正如另一个答案所描述的那样。当与 一起使用时*restore*,它们仅用于单个测试中的顺序模拟。
据我了解,JEST 并行运行所有测试
Jest 并行运行测试文件。至于单个测试,情况并非如此,除非concurrent正在使用测试。
| 归档时间: |
|
| 查看次数: |
3445 次 |
| 最近记录: |