# @exodus/test 中文文档

规范地址：https://npmcn.com/package/%40exodus/test/

版本：1\.0\.0-rc\.117
npm 元数据更新时间：2026-10-21T09:32:29.537Z
中文译文更新时间：2026-11-14T03:59:18.206Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40exodus/test
原文对照：https://npmcn.com/package/%40exodus/test/?lang=original
项目主页：https://github.com/ExodusOSS/test
源码仓库：https://github.com/ExodusOSS/test

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：216 kB，66 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：^20\.19\.0 \|\| ^22\.12\.0 \|\| \>=24\.0\.0
- 运行依赖：0 个
- peer 依赖：jsdom \*，workerd \*，electron \*，@babel/register ^7\.0\.0
- 首次发布：2024-07-06T15:41:59.056Z
- 最新版本发布：2026-10-21T09:32:29.314Z
- 近 30 天下载量：23912（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：118（近 12 个月 10 个）

## 中文简介

测试套房跑者

## 安装

```sh
npm install @exodus/test
```

也可以使用：`pnpm add @exodus/test`、`yarn add @exodus/test`、`bun add @exodus/test`

## README

# @ exodus/ 测试

[![](https://img.shields.io/npm/v/@exodus/test?style=flat-square)](https://npmjs.org/package/@exodus/test) [![](https://img.shields.io/github/release/ExodusOSS/test?style=flat-square&logo=github)](https://github.com/ExodusOSS/test/releases) [![](https://img.shields.io/npm/l/@exodus/test?style=flat-square&color=blue)](https://github.com/ExodusOSS/test/blob/HEAD/LICENSE) [![](https://img.shields.io/github/check-runs/ExodusOSS/test/main?style=flat-square&logo=github)](https://github.com/ExodusOSS/test/actions/workflows/checks.yml?query=branch%3Amain) [![](https://img.shields.io/github/stars/ExodusOSS/test)](https://github.com/ExodusOSS/test/stargazers)

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

* * *

它可以运行您现有的测试 [所有运行时间和浏览器](https://npmcn.com/package/%40exodus/test/#readme-engines),带有快照和模块模拟:

[![Node.js](https://img.shields.io/badge/Node.js-338750?style=for-the-badge&logo=Node.js&logoColor=FFF)](https://nodejs.org/api/test.html) [![Deno](https://img.shields.io/badge/Deno-121417?style=for-the-badge&logo=Deno&logoColor=FFF)](https://deno.com/) [![Bun](https://img.shields.io/badge/Bun-F472B6?style=for-the-badge&logo=Bun&logoColor=FFF)](https://bun.sh/) [![Electron](https://img.shields.io/badge/Electron-2F3242?style=for-the-badge&logo=Electron&logoColor=A2ECFB)](http://electronjs.org/) [![workerd](https://img.shields.io/badge/workerd-F38020?style=for-the-badge&logo=cloudflareworkers&logoColor=FFF)](https://github.com/cloudflare/workerd)  
[![Chrome](https://img.shields.io/badge/Chrome-4285F4?style=for-the-badge&logo=GoogleChrome&logoColor=FFF)](https://www.chromium.org/Home/) [![WebKit](https://img.shields.io/badge/WebKit-006CFF?style=for-the-badge&logo=Safari&logoColor=FFF)](http://webkit.org/) [![Firefox](https://img.shields.io/badge/Firefox-FF7139?style=for-the-badge&logo=Firefox&logoColor=FFF)](https://github.com/mozilla-firefox) [![Brave](https://img.shields.io/badge/Brave-F0F0F0?style=for-the-badge&logo=Brave)](https://github.com/brave) [![Microsoft Edge](https://img.shields.io/badge/Edge-0078D7?style=for-the-badge)](https://github.com/microsoftedge) [![Servo](https://img.shields.io/badge/Servo-009D9A?style=for-the-badge)](https://servo.org/)  
[![Hermes](https://img.shields.io/badge/Hermes-282C34?style=for-the-badge&logo=React)](https://hermesengine.dev/) [![V8](https://img.shields.io/badge/V8-4285F4?style=for-the-badge&logo=V8&logoColor=white)](https://v8.dev/docs/d8) [![JavaScriptCore](https://img.shields.io/badge/JavaScriptCore-006CFF?style=for-the-badge)](https://docs.webkit.org/Deep%20Dive/JSC/JavaScriptCore.html) [![SpiderMonkey](https://img.shields.io/badge/SpiderMonkey-FFD681?style=for-the-badge&logo=SpiderMonkey&logoColor=black)](https://spidermonkey.dev/)  
[![QuickJS](https://img.shields.io/badge/QuickJS-E58200?style=for-the-badge)](https://github.com/quickjs-ng/quickjs) [![XS](https://img.shields.io/badge/XS-0B307A?style=for-the-badge)](https://github.com/Moddable-OpenSource/moddable) [![GraalJS](https://img.shields.io/badge/GraalJS-C74634?style=for-the-badge)](https://github.com/oracle/graaljs) [![Boa](https://img.shields.io/badge/Boa-F3FF00?style=for-the-badge)](https://github.com/boa-dev/boa) [![Nova](https://img.shields.io/badge/Nova-FF810A?style=for-the-badge)](https://github.com/trynova/nova) [![Escargot](https://img.shields.io/badge/Escargot-1428A0?style=for-the-badge&logo=Samsung)](https://github.com/Samsung/escargot) [![engine262](https://img.shields.io/badge/engine262-f0db4f?style=for-the-badge&logo=javascript&logoColor=000)](https://github.com/engine262/engine262)

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

[![node:test](https://img.shields.io/badge/node:test-338750?style=for-the-badge&logo=Node.js&logoColor=FFF)](https://npmcn.com/package/%40exodus/test/#readme-using-with-nodetest-tests) [![Jest](https://img.shields.io/badge/Jest-C21325?style=for-the-badge&logo=jest&logoColor=fff)](https://npmcn.com/package/%40exodus/test/#readme-migrating-from-jest) [![tape](https://img.shields.io/badge/tape-6c5353?style=for-the-badge)](https://npmcn.com/package/%40exodus/test/#readme-migrating-from-tape)

见 [文档](https://exodusoss.github.io/test/)。 。 。 .

## 特征

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

## 开始

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

那就把这个加进去 `package.json` 脚本( 或参见 [引擎实例](https://github.com/ExodusOSS/bytes/blob/v1.11.0/package.json#L25-L42):

```json
  "test": "exodus-test"
```

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

见 [选项](https://npmcn.com/package/%40exodus/test/#readme-options) 以更改默认值,例如启用 Jest Globals `--jest`。 。 。 .

用于 [发动机](https://npmcn.com/package/%40exodus/test/#readme-engines) 上的 CI,例如参见 GitHub CI 配置 [@ exodus/ 字节](https://github.com/ExodusOSS/bytes/blob/main/.github/workflows/test.yml)。 。 。 .

### 使用节点:测试

您不需要更改测试或任何额外的配置 [开始](https://npmcn.com/package/%40exodus/test/#readme-getting-started)。 。 。 .

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

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

```json
  "test": "exodus-test"
```

但是,不像赤裸裸 `node --test` 它支持 [发动机](https://npmcn.com/package/%40exodus/test/#readme-engines) 编辑 [GitHub CI 记者](https://npmcn.com/package/%40exodus/test/#readme-github-actions)。 。 。 .

### 从杰斯特移走

用这个 `package.json` 脚本 :

```json
  "test": "exodus-test --jest"
```

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

```json
  "test": "exodus-test --jest --esbuild"
```

用于本地无害环境管理支持的模块调整,参见 [嘲笑无害环境管理的模块](https://npmcn.com/package/%40exodus/test/#readme-module-mocking-in-esm)。 。 。 .

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

### 从磁带中移走

用这个 `package.json` 脚本 :

```json
  "test": "exodus-test"
```

赞! 现在,你的磁带测试 运行在顶部 `node:test`,也可以在浏览器/光骨中运行 [发动机](https://npmcn.com/package/%40exodus/test/#readme-engines)。 。 。 .

> \[TIP\] 您可以选择替换 `tape` 进口 `@exodus/test/tape` 能够单独管理他们 `node ./path-to-file.js`数字 :
> 
> ```js
> import test from '@exodus/test/tape' // ESM
> const test = require('@exodus/test/tape') // CJS
> ```

## 发动机

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

-   `node:test` - 默认的,运行在现代节点上方 [测试跑道 API](https://nodejs.org/api/test.html)
-   `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` 电子测试 [浏览器窗口](https://www.electronjs.org/docs/latest/api/browser-window) 没有Node.js整合.
    -   `workerd:bundle` —— 说 [运行时间(工人)](https://github.com/cloudflare/workerd),预计 `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](https://v8.dev/docs/d8) (Chrome/Blink/Node.js JavaScript引擎)
    -   `jsc:bundle` —— 说 [Java 脚本公司](https://docs.webkit.org/Deep%20Dive/JSC/JavaScriptCore.html) (Safari/WebKit JavaScript引擎)
    -   `hermes:bundle` —— 说 [赫尔墨斯](https://hermesengine.dev/) (反应原生JavaScript引擎)
    -   `spidermonkey:bundle` —— 说 [蜘蛛猴](https://spidermonkey.dev/) (火狐/Gecko JavaScript引擎)
    -   `quickjs:bundle` —— 说 [快速JS](https://github.com/quickjs-ng/quickjs)
    -   `xs:bundle` —— 说 [可调用 XS](https://github.com/Moddable-OpenSource/moddable)
    -   `graaljs:bundle` —— 说 [格拉尔JS](https://github.com/oracle/graaljs)
    -   `escargot:bundle` —— 说 [埃斯卡尔戈特](https://github.com/Samsung/escargot)
    -   `boa:bundle` —— 说 [阿宝](https://github.com/boa-dev/boa)
    -   `nova:bundle` —— 说 [诺瓦](https://github.com/trynova/nova) (注意Nova本身是一个在进步中的工作)
    -   `engine262:bundle` - 说吧 [发动机262](https://github.com/engine262/engine262),逐一执行ECMA-262 (装入 [欧文](https://npmjs.com/package/esvu)(中文(简体) )

## 选项

-   `--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` - 具体说明其中之一 [发动机](https://npmcn.com/package/%40exodus/test/#readme-engines) 运行
    

## 记者样本

### 国 际

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

```console
# 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)
 

见活输出于 [中情局](https://github.com/ExodusOSS/test/actions/workflows/checks.yaml)

## 嘲笑无害环境管理的模块

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

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

又见 [最佳文档](https://jestjs.io/docs/ecmascript-modules#module-mocking-in-esm) 在那个.

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

```js
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` 将必须在模型定义后导入.

## 许可证

[麻省理工学院](https://npmcn.com/package/%40exodus/test/LICENSE)

## 常见问题

### @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 和提交记录判断。

