【发布时间】:2021-05-26 05:18:58
【问题描述】:
jest 测试文件有数百个,每个单元测试文件中可能有多个describe 块。
是否有配置或方法可以在每个 describe 块之前自动运行一段代码来进行模拟和设置?
我知道一种残酷的方法,就是将 beforeAll() 放在数百个文件的每个描述块中,但它的编辑量太大。我尝试了jest config object,但没有找到任何有用的选项。
【问题讨论】:
jest 测试文件有数百个,每个单元测试文件中可能有多个describe 块。
是否有配置或方法可以在每个 describe 块之前自动运行一段代码来进行模拟和设置?
我知道一种残酷的方法,就是将 beforeAll() 放在数百个文件的每个描述块中,但它的编辑量太大。我尝试了jest config object,但没有找到任何有用的选项。
【问题讨论】:
您可以使用setupFilesAfterEnv 配置。
例如,我将为所有测试文件模拟axios 模块。为了确保您的测试使用模拟的axios 而不是实际的axios 实现,请通过添加setupFileAfterEnv 来更新您的jest.config.js,如下所示:
./a.test.ts:
import axios from 'axios';
describe('66341555 - a', () => {
it('should pass', () => {
expect(jest.isMockFunction(axios)).toBeTruthy();
});
});
./b.test.ts:
import axios from 'axios';
describe('66341555 - b', () => {
it('should pass', () => {
expect(jest.isMockFunction(axios)).toBeTruthy();
});
});
axios.mock.js:
jest.mock('axios');
jest.config.js:
module.exports = {
preset: 'ts-jest/presets/js-with-ts',
setupFilesAfterEnv: ['./axios.mock.js'],
};
测试结果:
PASS examples/66341555/b.test.ts
PASS examples/66341555/a.test.ts
Test Suites: 2 passed, 2 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 3.493 s, estimated 4 s
这是一个真实的例子:https://github.com/yeahoffline/redis-mock#example-usage
【讨论】: