【问题标题】:How to detect which test framework is running the code如何检测哪个测试框架正在运行代码
【发布时间】:2026-01-10 20:10:01
【问题描述】:

我编写了一个小型库来增强对我的 Web 应用程序的测试,现在想将其抽象为一个单独的开源项目。该库足够通用,不仅对我自己在其他项目中有用,而且对其他人也有用。

唯一的问题是它实现了一组自定义匹配器和一些特定于 jest 的逻辑(这样做是为了方便实际测试代码不那么冗长)。为其他测试框架实现等效逻辑应该是直截了当的,但我很难理解如何始终如一地识别正在运行的测试框架(以选择正确的断言逻辑)。

我知道 jest 设置了某些环境变量 (How to determine if JEST is running the code or not?),但根据答案,未始终设置 jest 特定变量,所有测试框架都将 NODE_ENV 设置为相同的 test 值。检测哪个测试框架正在执行测试的最干净的方法是什么?谢谢

【问题讨论】:

    标签: javascript jasmine jestjs mocha.js


    【解决方案1】:

    在查看了所有环境变量之后,看看哪些是一致的,哪些是不一致的,这是我为确定启动器/框架而整理的一个函数:

    const path = require('path');
    function detectFramework() {
      const launcher = process.env._;
      return path.basename(launcher);
    }
    

    无论您在package.json 中如何给启动脚本起昵称,这都会起作用。希望其他人也觉得这很有用。

    【讨论】:

      【解决方案2】:

      我使用process.env.JEST_WORKER_ID 常量。 比如:

      if(process.env.JEST_WORKER_ID) {
          //You are in test mode.
      }
      

      【讨论】: