如何检测哪个测试框架是运行代码

How to detect which test framework is running the code

我写了一个小库来增强我的网络应用程序的测试,现在想把它抽象到一个单独的开源项目中。该库非常通用,不仅对我自己的其他项目有用,而且对其他人也有用。

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

我知道 jest 设置了某些环境变量 (),但根据答案,jest 特定变量的设置不一致,NODE_ENV 将设置为相同的 test 所有测试框架的价值。检测哪个测试框架正在执行测试的最干净的方法是什么?谢谢

查看所有环境变量后,查看哪些一致哪些不一致,这是我放在一起的一个函数,用于确定 launcher/framework:

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

无论您如何为 package.json 中的启动脚本命名,这都将起作用。希望其他人也觉得这很有用。

我使用 process.env.JEST_WORKER_ID 常量。 类似于:

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