@exodus/test

中文文档
1.0.0-rc.117发布于 2026/10/21MITTypeScriptESM + CJS零依赖近 30 天下载 2.4万

测试套房跑者

中文使用文档
文档目录12 节
  1. 特征
  2. 开始
  3. 使用节点:测试
  4. 从杰斯特移走
  5. 从磁带中移走
  6. 发动机
  7. 选项
  8. 记者样本
  9. 国 际
  10. GitHub 动作
  11. 嘲笑无害环境管理的模块
  12. 许可证

@ exodus/ 测试

一个跑者 node:test, (中文(简体) ), jest,以及 tape 测试套房 node:test (以及任何运行时间).


它可以运行您现有的测试 所有运行时间和浏览器,带有快照和模块模拟:

Node.js Deno Bun Electron workerd
Chrome WebKit Firefox Brave Microsoft Edge Servo
Hermes V8 JavaScriptCore SpiderMonkey
QuickJS XS GraalJS Boa Nova Escargot engine262

与用下列文字写的测试兼容:

node:test Jest tape

见 文档。 。 。 .

特征

  • 0 学习曲线: 运行您已有的测试
  • 到处奔跑(包括赫尔墨斯、 原生反应 Java 脚本引擎)
  • 本地无害环境管理,包括Jest测试
  • 在苍蝇上为旧的Faux-ESM穿行(可通过 --esbuild(中文(简体) )
  • 类型脚本支持
  • 使用快照在运行时间、浏览器和赤骨之间进行交叉比较(包括Hermes)
  • 测试- 不可知性 — 只要根据测试结果设置退出代码即可运行任何文件
  • 内建 欢乐 兼容性( 与 --jest,包括: jest.* 全球
    • 视原设置而定,最高可快到~10x
    • 实际 expect 模块,也 jest-extended 财务报告和审定财务报表 jest-when 只要在顶上工作
    • 快照,包括快照匹配器
    • 函数和计时器模拟
    • 测试。当前
    • 模块模型,包括无害环境管理模块(已经上载的无害环境管理模块只能在 node:test(中文(简体) )
    • 装入游戏配置
  • 内置网络记录/进行离线测试,嘲弄 fetch 财务报告和审定财务报表 WebSocket 会议
  • --drop-network 支持保证的离线测试
  • 通过v8(节点.js或 c8 (单位:千美元)),与伊斯坦布尔记者
  • GitHub 记者( 默认自动启用)
  • JSDOM 环境支持
  • 默认挂起测试出错( 不同于 jest(中文(简体) )
  • Babel 支持, 获取您的 Babel 配置( 可通过 --babel(中文(简体) )
  • 与 bun:test,它运行测试文件 在孤立的背景 Bun.
    没有这个, Bun 会在测试文件之间泄露全局 / 副作用 (参考, (中文(简体) ), 且不兼容 test() 生命周期/顺序

开始

第一个安装方式 npm install --save-dev @exodus/test (或你最喜欢的软件包管理器)

那就把这个加进去 package.json 脚本( 或参见 引擎实例:

  "test": "exodus-test"

就是这样。 它的工作是零配置.

见 选项 以更改默认值,例如启用 Jest Globals --jest。 。 。 .

用于 发动机 上的 CI,例如参见 GitHub CI 配置 @ exodus/ 字节。 。 。 .

使用节点:测试

您不需要更改测试或任何额外的配置 开始。 。 。 .

它只是工作出来的盒子, 在节点Js本土 node:test 在引擎盖下使用.

使用此脚本类似于 node --test数字 :

  "test": "exodus-test"

但是,不像赤裸裸 node --test 它支持 发动机 编辑 GitHub CI 记者。 。 。 .

从杰斯特移走

用这个 package.json 脚本 :

  "test": "exodus-test --jest"

如果这样行不通(例如,一些道具是faux-ESM),则添加 --esbuild 转接:

  "test": "exodus-test --jest --esbuild"

用于本地无害环境管理支持的模块调整,参见 嘲笑无害环境管理的模块。 。 。 .

一些与React Introduct的复杂设置尚不起作用.

从磁带中移走

用这个 package.json 脚本 :

  "test": "exodus-test"

赞! 现在,你的磁带测试 运行在顶部 node:test,也可以在浏览器/光骨中运行 发动机。 。 。 .

[TIP] 您可以选择替换 tape 进口 @exodus/test/tape 能够单独管理他们 node ./path-to-file.js数字 :

import test from '@exodus/test/tape' // ESM
const test = require('@exodus/test/tape') // CJS

发动机

使用 --engine (或 EXODUS_TEST_ENGINE=具体说明:

  • node:test - 默认的,运行在现代节点上方 测试跑道 API
  • node:pure 纯JS,在节点上执行
  • node:bundle - 与 node:pure,但在发射前将所有文件装入一个文件
  • 其他运行时间 :
    • deno:pure - Deno(要求Deno v 2. 4.0 或以后,期望) deno 待定)
    • deno:bundle 德诺(v1或v2),以 deno 谓
    • deno:test ——不完整,缺乏 --jest 缺少支持 afterEach 编号 : beforeEach 在德诺
    • bun:pure 编号 : bun:bundle - Bun,预期 bun 备查
    • electron-as-node:test 编号 : electron-as-node:pure 编号 : electron-as-node:bundle
      与 node:*,但使用时 electron 二进制.
      使用套件主要是在BoringSSL上进行测试,而不是OpenSSL.
    • electron:bundle 电子测试 浏览器窗口 没有Node.js整合.
    • workerd:bundle —— 说 运行时间(工人),预计 workerd 待安装的软件包
  • 浏览器 :
    • Playwright 构建( 安装 Playwright 构建的引擎 ) exodus-test --playwright install(中文(简体) )
      • chromium:playwright - 由剧作家建造的铬
      • firefox:playwright – 播放机所建 Firefox
      • webkit:playwright - Playwright所建的WebKit,靠近Safari
      • chrome:playwright - Chrome(安装系统)
      • msedge:playwright - 微软边缘(安装系统)
    • 管道工(系统提供或上游建筑)
      • chrome:puppeteer -克罗姆
      • firefox:puppeteer • 火狐
      • brave:puppeteer - 勇敢点
      • msedge:puppeteer ——微软边缘
    • 套装
      • servo:bundle Servo(预计安装在系统中)
  • Barebone发动机(系统提供或安装 npx jsvu 编号 : npx esvu:
    • v8:bundle —— 说 v8 个CLI (Chrome/Blink/Node.js JavaScript引擎)
    • jsc:bundle —— 说 Java 脚本公司 (Safari/WebKit JavaScript引擎)
    • hermes:bundle —— 说 赫尔墨斯 (反应原生JavaScript引擎)
    • spidermonkey:bundle —— 说 蜘蛛猴 (火狐/Gecko JavaScript引擎)
    • quickjs:bundle —— 说 快速JS
    • xs:bundle —— 说 可调用 XS
    • graaljs:bundle —— 说 格拉尔JS
    • escargot:bundle —— 说 埃斯卡尔戈特
    • boa:bundle —— 说 阿宝
    • nova:bundle —— 说 诺瓦 (注意Nova本身是一个在进步中的工作)
    • engine262:bundle - 说吧 发动机262,逐一执行ECMA-262 (装入 欧文(中文(简体) )

选项

  • --jest ——将jest测试助手注册为全局变量,同时也加载 jest.config.* 配置选项

  • --esbuild – 使用 esbuild 加载器,也可以在旧节点上启用 Typescription 支持.js

  • --typescript ——启用 Typescriptty 类型剥取(仅需在旧节点.js版本上使用,而本地没有)

  • --babel - 使用bail加载器(比 --esbuild,如果有一个特殊的配置的话

  • --coverage ——实现覆盖,打印覆盖产出(按覆盖引擎排列)

  • --coverage-engine c8 ——使用c8覆盖引擎(默认),也生成 ./coverage/ 日记

  • --coverage-engine node ——使用Node.js已建覆盖引擎

  • --watch ——在监视模式下运行,并在文件更改上重新运行测试

  • --only - 只进行标记为 test.only

  • --passWithNoTests —— 找不到测试文件时不要出错

  • --write-snapshots - 写快照而不是验证快照(已经) --test-update-snapshots (别名)

  • --test-force-exit 测试完成后部队撤离

  • --engine - 具体说明其中之一 发动机 运行

记者样本

国 际

输出支持时使用颜色,例如在终端中.

# tests/jest/expect.mock.test.js
✔ PASS drinkAll > drinks something lemon-flavoured (1.300417ms)
✔ PASS drinkAll > does not drink something octopus-flavoured (0.191791ms)
✔ PASS drinkAll (1.842959ms)
✔ PASS drinkEach > drinkEach drinks each drink (0.360625ms)
✔ PASS drinkEach (0.463416ms)
✔ PASS toHaveBeenCalledWith > registration applies correctly to orange La Croix (0.53325ms)
✔ PASS toHaveBeenCalledWith (0.564166ms)
✔ PASS toHaveBeenLastCalledWith > applying to all flavors does mango last (0.380375ms)
✔ PASS toHaveBeenLastCalledWith (0.473417ms)
# tests/jest/fn.invocationCallOrder.test.js
✔ PASS mock.invocationCallOrder (4.221042ms)

GitHub 动作

崩溃测试结果每个文件, 像这样:

✅ 试验/试验/生命周期试验.js
  ✔ PASS A > B > C (3.26166ms)
  ✔ PASS A > B > D (1.699463ms)
  ✔ PASS A > B (6.72719ms)
  ✔ PASS A > E > F (1.117997ms)
  ✔ PASS A > E > G > H (1.330904ms)
  ✔ PASS A > E > G (1.94971ms)
  ✔ PASS A > E (3.821825ms)
  ✔ PASS A > I (0.533096ms)
  ✔ PASS A (13.887889ms)
  ✔ PASS J (0.373187ms)
  ✔ PASS K > L (0.659852ms)
  ✔ PASS K (1.143195ms)
 
✅ 测试/测试/测试/测试
  ✔ PASS advanceTimersByTime() does not let microtasks to pass (5.326604ms)
  ✔ PASS advanceTimersByTime() does not let microtasks to pass even with await (1.336064ms)
  ✔ PASS advanceTimersByTimeAsync() lets microtasks to pass (6.99526ms)
  ✔ PASS advanceTimersByTimeAsync() lets microtasks to pass, chained (10.131664ms)
  ✔ PASS advanceTimersByTimeAsync() lets microtasks to pass, longer chained (8.635472ms)
  ✔ PASS advanceTimersByTimeAsync() lets microtasks to pass, async chain (56.937983ms)
 

见活输出于 中情局

嘲笑无害环境管理的模块

无害环境管理中的模块模拟是一个常见的混淆来源,因为大多数旧设置中的杰斯并不运行真正的无害环境管理, 转而使用 Babel 将无害环境管理转化为 CJS, 然后升起嘲笑顶端 require() 打电话.

在无害环境管理世界中,这种升降是不可能的,因为静态进口说明总是在以前得到解决的 其他密码.

又见 最佳文档 在那个.

对来自CJS或Babel的端口编码,例如,可采用下列动态进口方法:

jest.doMock('./hogwarts.js', () => ({
  __esModule: true,
  default: jest.fn(),
}))

const { default: getEntryQualification } = await import('./hogwarts.js')
const { qualifiesForHogwarts } = await import('./wizard.js') // module importing ./hogwarts.js

test('qualifies for Hogwarts', () => {
  // doSomething is a mock function
  getEntryQualification.mockReturnValue(['lumos'])

  expect(qualifiesForHogwarts('potter')).toBe(false)
  getEntryQualification.mockReturnValue([])
  expect(qualifiesForHogwarts('potter')).toBe(true)
})

注意所有过渡导入的模块 hogwarts.js 将必须在模型定义后导入.

许可证

麻省理工学院

版本与发布记录

@exodus/test 共发布 118 个版本,首次发布于 2024/07/06;过去 12 个月发布了 10 个版本。

版本发布日期距今
1.0.0-rc.117latest2026/10/2123 天前
1.0.0-rc.1162026/02/178 个月前
1.0.0-rc.1152026/02/109 个月前
1.0.0-rc.1142026/02/089 个月前
1.0.0-rc.1132026/02/079 个月前
1.0.0-rc.1122026/02/069 个月前

关于 @exodus/test 的常见问题

@exodus/test 是什么?

测试套房跑者

如何安装 @exodus/test?

在项目目录运行 npm install @exodus/test,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 exodus-test,可以用 npx exodus-test 直接运行。

@exodus/test 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@exodus/test 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@exodus/test 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js ^20.19.0 || ^22.12.0 || >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@exodus/test 可以商用吗?

@exodus/test 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@exodus/test 的下载量有多少?

根据 npm 官方下载统计,@exodus/test 在 2026/10/14 – 2026/11/12 这 30 天内被下载 23,912 次,日均约 797 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@exodus/test 还在维护吗?

最新版本 1.0.0-rc.117 发布于 2026/10/21(23 天前);至今共发布 118 个版本,其中过去 12 个月发布了 10 个;首次发布于 2024/07/06。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。