【问题标题】:In Jest, how to run a piece of code to do mock before each describe block?在 Jest 中,如何在每个 describe 块之前运行一段代码来做 mock?
【发布时间】:2021-05-26 05:18:58
【问题描述】:

jest 测试文件有数百个,每个单元测试文件中可能有多个describe 块。

是否有配置或方法可以在每个 describe 块之前自动运行一段代码来进行模拟和设置?

我知道一种残酷的方法,就是将 beforeAll() 放在数百个文件的每个描述块中,但它的编辑量太大。我尝试了jest config object,但没有找到任何有用的选项。

【问题讨论】:

    标签: testing jestjs


    【解决方案1】:

    您可以使用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

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 1970-01-01
      • 2018-09-15
      • 2023-03-05
      • 2020-11-21
      • 2011-10-22
      • 1970-01-01
      • 2014-05-02
      相关资源
      最近更新 更多