【问题标题】:Running a global test setup before each test in Jest在 Jest 中的每个测试之前运行全局测试设置
【发布时间】:2018-07-21 05:35:51
【问题描述】:

我正在尝试在我的 Jest 测试套件中的每个测试之前执行测试设置功能。我知道我可以使用 beforeEach 在单个测试文件中完成此操作,但我想对我的所有测试文件全局执行此操作而无需显式修改每个单个文件。

我查看了jest configuration file,并注意到一些认为可能有效的配置:globalSetupsetupFiles,但它们似乎只运行一次(在测试运行的最开始时)。就像我说的,我需要在测试文件中的“每个”it 块之前运行它。

这可能吗?

【问题讨论】:

  • 我知道这根本没有帮助,但我认为在 Jest 中没有办法做到这一点。

标签: unit-testing jestjs


【解决方案1】:

您可以使用 setupFilesAfterEnv(替换 setupTestFrameworkScriptFile,从 jest 版本 24.x 中弃用),它将在每次测试之前运行

// package.json
{
  // ...
  "jest": {
    "setupFilesAfterEnv": ["<rootDir>/setupTests.js"]
  }
}

而在setupTests.js,可以直接写:

global.beforeEach(() => {
  ...
});

global.afterEach(() => {
   ...
});

【讨论】:

  • 注意:这行得通,但正如@Alvin Lee 在下面指出的那样:“setupTestFrameworkScriptFile 已被弃用,取而代之的是 setupFilesAfterEnv”
  • 对我不起作用... global.beforeEach 不是函数。
  • @geoidesic 使用 setupFilesAfterEnv 而不是 setupTests (顾名思义,届时将设置包括 beforeEach 在内的测试环境)
  • 这不再起作用了。您必须将setupFilesAfterEnv 添加到jest.config.js
【解决方案2】:

正如@zzz 的答案的后续,最近的documentation on Configuring Jest 注释:

注意:setupTestFrameworkScriptFilesetupFilesAfterEnv 取代。

所以现在,您的文件应该如下所示:

// package.json
{
  // ...
  "jest": {
    "setupFilesAfterEnv": [
      "<rootDir>/setupTests.js"
    ]
  } 
}

【讨论】:

    【解决方案3】:

    setupFilesAfterEnv 配置是可行的方法,是的,您可以在该文件中使用beforeEach,它将在所有套装的每个测试中运行。

    // jest.config.js
    
    module.exports = {
      setupFilesAfterEnv: ['<rootDir>/tests/setupTests.ts']
    }
    
    
    // tests/setupTests.ts
    
    beforeEach(() => {
      console.log('before each')
    })
    
    afterEach(() => {
      console.log('after each')
    })
    

    试试看!

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 2014-09-20
      • 1970-01-01
      • 2019-06-26
      • 2017-05-02
      • 1970-01-01
      • 2022-11-12
      • 2014-11-24
      • 2022-08-24
      相关资源
      最近更新 更多