Javascript 如何检测哪个测试框架正在运行代码

Javascript 如何检测哪个测试框架正在运行代码,javascript,jasmine,jestjs,mocha.js,Javascript,Jasmine,Jestjs,Mocha.js,我写了一个小库来增强我的web应用程序的测试,现在想把它抽象成一个独立的开源项目。该库非常通用,它不仅对我自己在其他项目上有用,而且对其他项目也有用 唯一的问题是它实现了一组自定义匹配器和一些jest特定的逻辑(这样做是为了方便实际测试代码不那么冗长)。为其他测试框架实现等效逻辑应该是直截了当的,但我很难理解如何一致地识别正在运行的测试框架(以选择正确的断言逻辑) 我知道jest设置了某些环境变量(),但根据答案,jest特定变量的设置并不一致,所有测试框架都会将NODE_ENV设置为相同的te

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

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


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

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

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

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

我使用
process.env.JEST\u WORKER\u ID
常量。 比如:

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