如何在 Jest 中找到正在运行的测试的文件名和路径

may*_*o19 5 testing node.js jestjs

我正在使用 Jest 进行测试。如何访问当前正在运行的测试的文件名或文件路径?

我需要一个条件语句,根据它是单元测试文件还是集成测试文件来运行不同的代码行。

这是我想要实现的目标的示例:

beforeAll(() => {
  if (integration_test_file){
    // run this this code 

  } else if (unit_test_file){
    // run this code instead 
  }
})
Run Code Online (Sandbox Code Playgroud)

Est*_*ask 5

此信息在 Jest 环境中可用。这是自定义环境的情况:

const Environment = require('jest-environment-node'); // or jest-environment-jsdom

module.exports = class MyEnvironment extends Environment {
  constructor(config, context) {
    super(config, context);
    this.testPath = context.testPath;
  }

  async setup() {
    await super.setup();
    this.global.IS_INTEGRATION = /match integration/.test(this.testPath);
  }
}
Run Code Online (Sandbox Code Playgroud)

为每个测试套件实例化环境,testPath包含当前测试文件的完整路径。

IS_INTEGRATIONsetupFilesAfterEnv全局变量将在并测试自身中可用。如果需要对所有测试评估代码,它可能属于环境setupteardown方法。


may*_*o19 2

您可以通过其全局变量访问在 jest 中运行的测试的文件路径的名称。

文件路径可以在全局变量下找到

jasmine.testPath
Run Code Online (Sandbox Code Playgroud)

或者

global.jasmine.testPath
Run Code Online (Sandbox Code Playgroud)

这个答案仅适用于您使用 jest 及其默认测试运行程序“jasmine”或“jasmine2”的情况。结果会根据您使用的测试运行程序而有所不同。请参阅 https://jestjs.io/docs/en/configuration#testrunner-string

  • 请注意,不支持直接使用 Jasmine API,因为当切换到 [Circus](https://www.npmjs.com/package/jest-circus) 时,它会中断。 (3认同)