同步证人
看看你的维特输油管到底做了什么 收据.
重新来过 重新来过, console.log- 维特一直知道发生了什么
只是从来没有告诉你。 Async Witness 运行您真正的管道并写下 收据 每次运行时:
证明你,CI, 或AI特工可以采取行动.
⚠️ 提前释放 - 那个 规格 是产品真实的. 由杰克设计,执行 神话,经 代码。 。 。 .
30秒内一个盒子
A 类 选项框 是一个小文件 运行在您真正的维特管道 并声称什么 在管道本身的词汇中:
import { box } from '@async/witness';
export default box('message updates without reload', async ({ browser, project, expect }) => {
// Visit a real route — this auto-starts your real Vite dev server.
const page = await browser.visit('/demo');
// Edit a real source file, like a developer saving in their editor.
const change = await project.edit('src/message.ts', {
replace: ['before', 'after'],
});
// Declare what Vite should have done about it.
await expect.edit(change, {
client: { hmr: 'accepted' }, // hot update applied, no full reload
});
// Confirm the browser actually shows the new text.
await expect.page.text(page, '#message', 'after');
});
witness hmr
Async Witness 运行此框,恢复已编辑的文件,并写收据给 .witness/receipts/ —— 说
或失败,人和机器可读。 如果盒子失败,收据会解释 为什么 内
维特自己的术语:维特发送的载荷,服务器是否重启,控制台所说的话.
盒子能证明什么
- 一条路由可以装入每个资产 和一个干净的控制台
- 用户制作的UI状态——点击、打入、盘旋、按键、拖入或滚动入的状态——在编辑后存活下来,每一次互动都被记录为收件证据
- 编辑热度更新、重载或默默无所作为——每个环境
- 仅由服务器编辑的浏览器
- 用新插件激活的配置编辑重新启动了服务器
- SSR 制取和水合物时没有控制台出错
- 这个 已建成 app行为类似 dev( 构建 + 预览等同)
- 人工制品是正确的——显示的条目,没有陈旧的占位符,没有
node:fs在工人捆绑中 - 业绩预算内保留一个工作流程
每张收据都有证人
请求只回答你想问的问题 有趣的失败在于什么 你没有问——控制台错误没有打破你的选择器,请求 当页面仍然打开时死亡, 重新装入的满载在正确的文本上 无论如何。 Async Witness对待一个盒子就像一个案件: 收据是案件档案 观察了里面的跑道.
三名目击者从不同的角度观看了每个浏览器盒. 这个 管道
证人是Vite的服务器侧面——它知道实际发送的热载荷是什么,是否
服务器重新启动,每个环境对您的编辑所做的。 这个 客户端 证人是页面
——它的操纵台,它未发现的错误,你框架发射的自定义事件. 这个
驱动程序 证人手表来自CDP的外页
net::ERR_* 原因,导航页面无法隐藏,截图. 他们都看不见
别人所见的,这是重点,他们互相证实或抵触
独立.
每个证人每个盒子都有判决 当一个盒子通过,但证人持有证据 与跑道相对的, 路由标记 争议数字 :
pass noisy page records console and network evidence [pipeline+ client! driver!] contested
client reported: 1 console error driver reported: 1 failed request
每一个断言都在这里通过。 页面还记录出一个错误,请求失效——事实否 被问及,保存下来而不是被吞噬。 这就是"测试通过"和 "应用程序是好的",每跑一次都能看到.
直接检查存储收据上的任何盒子:
witness evidence 'noisy page'
crimes reported (2):
! console error Failed to load resource: net::ERR_ABORTED — reported by client
! request failed GET http://127.0.0.1:5173/missing.js — reported by driver
证人身份和判决是收据JSON中的简单数据——稳定、可移动、安全 CI和特工要消费。 颜色只是你的终端画的.
为什么Vitest / Playwright / 故事本?
他们很擅长他们拥有的东西,但他们看到了 页 次,而不是 管道 产生 这个 这种差距是"所有测试通过"和"应用被打破"同时发生的. 同步证人 拥有管道:从编辑到Vite环境事件的链条到您看到的,带有 收条保存整个故事.
下方也没有自动化框架 Async Witness 将浏览器本身驱动到 Chrome DevTools Protocols — 几千行WebSocket和JSON完全拥有, 零依赖性。 一个集合浏览器为整个运行服务,每个盒子都各自隔离 浏览器上下文,同样的架构剧作家使用内部,这就是目击结束的方式 每一次测试的速度都比每个平台CI量的剧作家核心要快.
带上自己的浏览器
Async Witness 已经在您的机器上驱动了 Chromium- family 浏览器 协议——不依赖剧作家,安装时不下载. 发现顺序 :
WITNESS_BROWSER_PATH——明确超标. 如果设定了,但没有指向可执行文件, 发现失败时出现错误,而不是默默地掉入到另一个浏览器中.- 系统安装了Chrome,Edge,或Chromium,在通常的每个OS位置.
- Playwright 的浏览器缓存作为礼貌回放(
~/Library/Caches/ms-playwright打开 马科斯,$XDG_CACHE_HOME或者说~/.cache/ms-playwright在Linux上,%LOCALAPPDATA%\ms-playwright视窗上)——全chromium-<revision>仅下载, 最新的第一,无头壳被跳过.
macOS,Linux,和Windows都是在CI中实现的. 找不到任何证据,证人就会失败 检查的准确路径 .
文档
- 光谱 ——产品取向与真相来源
状态
以切为地. 框写、编辑/建设/审查运行、浏览器证据、证人判决
与 witness evidence 钻入,CLI,和JSON的收据今天工作。 这个
状态采集UI,生成类型,接收重播即将到来.
捐款
工作空间运行在 小时 (图书馆本身是运行时间不可知的——它运行在Vite的任何地方) 运行 :
pnpm install # install dependencies
pnpm run test # run the test suite (drives real Vite pipelines)
pnpm run check # format check + lint + typecheck