@btravstack/testing

中文文档
0.58.0发布于 2026/11/08MITTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 8627

测试应用程序@ btravstack/ 核心靴: 模拟运行时间、 假时钟、 停止启动的靴子固定器、 并启动运行图

中文使用文档
文档目录4 节
  1. 启动的应用程序作为固定器
  2. 飞来飞去
  3. 一个本地的JWT发行商,在自己的子路径上
  4. 许可证

@btravstack/测试

测试应用程序 @btravstack/core 脚 A 类 test.extend 用测试默认启动模块并停止每个应用程序的固定图 当测试结束,一个水龙头,它把服务带回来 图表 模拟运行时间 随需要移动的时钟——方式 @nestjs/testing {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}然后远离内核 所以是制作 捆绑从不拉出假货.

📖 文档 • 妇女 参考文献 • 妇女 API 参考

pnpm add -D @btravstack/testing @btravstack/core @btravstack/config @btravstack/di unthrown

@btravstack/core, (中文(简体) ), @btravstack/config, (中文(简体) ), @btravstack/di 财务报告和审定财务报表 unthrown 为: 端点依赖性; 软件包不依赖其他任何条件—— 甚至 vitest数字 : bootFixture 是一个平地 (ctx, use) => Promise<void> 函数,即 vitest 的固定协议,所以不需要导入来将其交给 test.extend。 。 。 . jose 是一个 选项 后端对等 @btravstack/testing/jwt 子路径 - 见下文——因此,一个从未进口过它的消费者不会安装任何额外的设备. 节点 >=22。 。 。 .

启动的应用程序作为固定器

import { bootFixture, tapped, type Boot } from "@btravstack/testing";
import { expect, test } from "vitest";

const it = test.extend<{ boot: Boot }>({
  boot: bootFixture({ env: { PORT: "0", HOST: "127.0.0.1" } }),
});

it("serves on an ephemeral port", async ({ boot }) => {
  const app = boot(OrderApi);

  await expect(app.runtimeInfo()).toBeOkWith(
    expect.objectContaining({ port: expect.any(Number) }),
  );
});

it("holds the very logger the use cases write to", async ({ boot }) => {
  const tap = tapped(OrderApi, [Logger]);
  await boot(tap.module).runtimeInfo();

  const [logger] = tap.services();
  expect(logger.lines()).toEqual([]);
});

boot 实值 start 同样的签名 同样的签名 编译时间门, 减 signals ——永远关闭——与 probes: false 除非 呼叫要求一个港口, preDrainDelayMs: 0 和无声 onEvent 作为 默认值,每个值都高于固定值 defaults 每一个电话. 当测试结束时,每个开始的应用程序都会停止, 在每一个出口路径上, a (a) 未包括的主张 Defect 打开 exited 测试甚至失败 当测试从不看它, 而一个模型 Err - 启动失败 检验标准可能坚持——通过.

tapped(module, [Port, …]) 组成另一个提供者周围 module, (中文(简体) ), 取决于这些港口,并记住它用什么建造的: services() 解答运行中的图建起后所保存的示例 runtimeInfo() 决心,说,和扔前。 大门拒绝开口 module 不导出.

飞来飞去

  • bootFixture(defaults?) 上面的固定装置; Boot 财务报告和审定财务报表 BootDefaults 是它的种类.
  • tapped(module, ports) → { module, services() } - 阅读服务 被启动的申请.
  • testRuntime(name?, { unit? }) 编号 : TestRuntimePort 记忆 Runtime 与 submit() 在一个排水沟对开的单位, host() 改为 到达 RuntimeHost 上一个开始,一个 module 那个 在起步者愿意的地方提供; unit 每个提交单元 没有种子的叉子 在它工作开始之前 那个模块需要什么 module属于自己的,所以 start 而不是第一个 submit() 失败.
  • overridden(module, [providers]) - 将指定供应商替换为 真实 组成根,而不是维持平行测试根 旁边 换一个 提供者的子系统: 供货商的兄弟姐妹还在构筑,所以交换一个完整的适配器堆栈 仍是一个不同的模块 由它组成。 端口的覆盖 树停止提供是一个 WiringDefect ("无所可覆"),即 何以能使测试根不悄悄地从真根上飘去 漂移,四个手持的平行根 已经在这里产生. overridden(module, [providers], { unit: { user: [providers] } }) 达到 在单元单元内,根按种类与同个漂移门相连 脚.
  • createFakeClock(start?) a 包括: Clock 页:1 StartOptions.clock 谁 时间只移动到 advance(ms)。 。 。 .

拆分规则:a Defect 打开 exited 测试失败, 一个模型 Err 已经 没有.

一个本地的JWT发行商,在自己的子路径上

import { localIssuer } from "@btravstack/testing/jwt";

const issuer = await localIssuer({
  issuer: "https://issuer.test",
  audience: "orders-api",
}).get();

const token = await issuer.sign({ sub: "u-1" }).get();
// verify `token` against `issuer.jwks`, the same way a real JWKS would be
await issuer.close();

sign 接受字符串或只读的受众列表,包括故意宽泛 用于接受政策拒绝测试的标志.

@btravstack/testing/jwt是因为 localIssuer(options) 薄荷生成密钥 双对, a node:http 听众以 JWKS 身份回答其公钥 sign(claims?, options?) 关闭私人密钥 —— 一个真实的获取 一个真正的JWKS文档, 用于测试, 想要验证库自己的 行为而不是双倍. sign是因为 expiresIn: false 薄荷一个符号 没有 exp ,而密钥为RS256。 该子路径需要"共同JS"下的"22.12"节点- jose 实值 只有无害环境管理,所以CJS建设 require("jose") 取决于 require(esm)· ; 无害环境管理的消费者,以及从未进口该次路径的任何人,不受影响.

许可证

麻省理工学院 贝诺伊特旅行社

版本与发布记录

@btravstack/testing 共发布 62 个版本,首次发布于 2026/08/26;过去 12 个月发布了 62 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.58.0latest2026/11/08今天
0.57.02026/11/071 天前
0.56.12026/11/062 天前
0.56.02026/11/062 天前
0.55.12026/11/035 天前
0.55.02026/11/035 天前

关于 @btravstack/testing 的常见问题

@btravstack/testing 是什么?

测试应用程序@ btravstack/ 核心靴: 模拟运行时间、 假时钟、 停止启动的靴子固定器、 并启动运行图

如何安装 @btravstack/testing?

在项目目录运行 npm install @btravstack/testing,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:unthrown(^5.0.0)、@btravstack/di(^0.58.0)、@btravstack/core(^0.58.0)、@btravstack/config(^0.58.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@btravstack/testing 支持 TypeScript 吗?

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

@btravstack/testing 支持 ESM 还是 CommonJS?

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

@btravstack/testing 需要什么版本的 Node.js?

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

@btravstack/testing 可以商用吗?

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

@btravstack/testing 的下载量有多少?

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

@btravstack/testing 还在维护吗?

最新版本 0.58.0 发布于 2026/11/08(今天);至今共发布 62 个版本,其中过去 12 个月发布了 62 个;首次发布于 2026/08/26。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。