@ exodus/ 测试
一个跑者 node:test, (中文(简体) ), jest,以及 tape 测试套房 node:test (以及任何运行时间).
它可以运行您现有的测试 所有运行时间和浏览器,带有快照和模块模拟:
与用下列文字写的测试兼容:
见 文档。 。 。 .
特征
- 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- 默认的,运行在现代节点上方 测试跑道 APInode: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– 播放机所建 Firefoxwebkit:playwright- Playwright所建的WebKit,靠近Safarichrome:playwright- Chrome(安装系统)msedge:playwright- 微软边缘(安装系统)
- 管道工(系统提供或上游建筑)
chrome:puppeteer-克罗姆firefox:puppeteer• 火狐brave:puppeteer- 勇敢点msedge:puppeteer——微软边缘
- 套装
servo:bundleServo(预计安装在系统中)
- Playwright 构建( 安装 Playwright 构建的引擎 )
- 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—— 说 快速JSxs:bundle—— 说 可调用 XSgraaljs:bundle—— 说 格拉尔JSescargot: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 将必须在模型定义后导入.