Now vibe coding, so learning hammer FE ?
《Vitest 5.0 正式发布》
标签:
#前端 #JavaScript #Vitest #测试框架 #单元测试 #性能优化 #BrowserMode #MockAPI #基准测试 #断言改进 #代码覆盖率
总结:
Vitest 5.0 于 2026 年 9 月 3 日正式发布,本次大版本以性能优化为核心,同时带来 Trace View 追踪视图、嵌套项目配置、
文章要点:
1. 性能大幅提升:通过共享 Vite 服务器、稳定的文件系统模块缓存、减少主进程与 worker 往返、加速 vm 池与浏览器模式等优化,整体测试速度提升 8%–53%,大型项目(1,280 模块)运行时间从 7.24s 降至 5.83s。
2. **新增
Browser Mode 内置 Trace Viewew**:开启
嵌套项目与配置继承继承**:内联项目默认继承根配置(无需
5. **新 API
8. **Mock
9. **更严格的断言行为**:未 await 的异步断言(
10. **
11. **报告器统一输出目录**:所有报告器输出集中到
12. **其他实用改进**:新增
13. **破坏性变更**:要求 Vite >= 6.4.0 和 Node.js >= 22.12.0,升级前建议查阅迁移指南。
URL:
https://vitest.dev/blog/vitest-5
标签:
#前端 #JavaScript #Vitest #测试框架 #单元测试 #性能优化 #BrowserMode #MockAPI #基准测试 #断言改进 #代码覆盖率
总结:
Vitest 5.0 于 2026 年 9 月 3 日正式发布,本次大版本以性能优化为核心,同时带来 Trace View 追踪视图、嵌套项目配置、
vi.when 条件 Mock、基准测试重写等多项重要更新,并默认启用更严格的断言与 clearMocks 行为,要求 Vite >= 6.4.0 和 Node.js >= 22.12.0。文章要点:
1. 性能大幅提升:通过共享 Vite 服务器、稳定的文件系统模块缓存、减少主进程与 worker 往返、加速 vm 池与浏览器模式等优化,整体测试速度提升 8%–53%,大型项目(1,280 模块)运行时间从 7.24s 降至 5.83s。
2. **新增
vitest doctor 诊断工具**:自动运行替代配置并推荐更快的选项,同时默认输出性能提示,帮助用户发现配置瓶颈。Browser Mode 内置 Trace Viewew**:开启
browser.traceView 后,可记录交互、断言和 DOM 快照,支持逐步回放测试过程,便于调试 CI 失败。嵌套项目与配置继承继承**:内联项目默认继承根配置(无需
extends: true),被引用的配置文件可声明自己的 projects,支持多级嵌套结构。5. **新 API
vi.when**:支持按参数定义不同的 Mock 返回值,支持深度相等和 expect.any() 等非对称匹配器,并可限制调用基准测试 API 重写API 重写**:bench 变为测试上下文 fixture,可在常规 test() 中使用,支持 fixtures、生命周期钩子、重试和断言,结果可存储并与基线定位器错误显示 ARIA 树ARIA 树**:浏览器模式下定位失败时,同时打印 ARIA 快照和 HTML,帮助快速理解 getByRole 等查询的匹配逻辑;定位器默认启用严格模式。8. **Mock
Temporal API**:假计时器现在同时模拟 Temporal 和 Date,适用于 vi.useFakeTimers() 和 vi.setSystemTime()。9. **更严格的断言行为**:未 await 的异步断言(
resolves、rejects 等)现在会导致测试失败;expect.poll 超时后拒绝并支持 AbortSignal 取消。10. **
clearMocks 默认启用**:每个测试前自动清除 Mock 调用历史,避免测试间报告器统一输出目录。11. **报告器统一输出目录**:所有报告器输出集中到
.vitest 目录,减少 .gitignore 配置;HTML 报告器支持 singleFile 选项生成单文件报告。12. **其他实用改进**:新增
--repeats 选项重复运行测试以排查 flaky 测试;injectCjsGlobals 可禁用 CJS 全局注入;覆盖率工具切换到维护中的 @vitest/istanbuljs 包。13. **破坏性变更**:要求 Vite >= 6.4.0 和 Node.js >= 22.12.0,升级前建议查阅迁移指南。
URL:
https://vitest.dev/blog/vitest-5
《Playwright Fixtures 的"魔法"实现原理》
标签:#测试 #Playwright #JavaScript #API设计 #源码分析
总结:
作者深入剖析 Playwright 的 Fixtures API 如何通过
文章要点:
1. 懒加载是核心卖点**:Playwright 的 fixtures 按需初始化,不用就不创建,能节省测试执行时间;但传统 Proxy/getter 方案会导致异步 fixture 需要 `await`,破坏 API 体验
2. "偷看"函数参数是关键**:Playwright 在不调用测试函数的情况下,就能知道它需要哪些 fixture,这解决了"鸡生蛋"难题——要知道用哪些 fixture 才能准备它们,但准备前又不能运行测试
3. **`Function.prototype.toString()
4. **解析逻辑相当 robust**:源码展示了
5. **压缩工具不会破坏它**:实测 Terser 和 esbuild 的 minify 只会把参数名缩短(如
6. **魔法有代价**:函数组合(如 `noThrow(fn)
7. **作者态度很诚实**:认可 Playwright 团队的选择非常适合测试框架场景,但坦言这种魔法比个人期望的多了一点,想不出其他库有同样充分的理由采用此方案
URL:
https://ivakin.dev/blog/how-playwright-fixtures-work
标签:#测试 #Playwright #JavaScript #API设计 #源码分析
总结:
作者深入剖析 Playwright 的 Fixtures API 如何通过
Function.prototype.toString() 在测试运行前"偷看"函数参数,实现按需懒加载。文章揭示了这一巧妙但略带"魔法"的设计:Playwright 强制要求测试函数使用对象解构语法(如 `async ({ page }) =>`),然后通过正则解析源码字符串提取 fixture 名称,从而只初始化测试真正需要的依赖。作者还验证了该方案对不同函数类型、压缩工具(Terser/esbuild)的兼容性,并坦诚讨论了其"神奇感"与潜在局限性。文章要点:
1. 懒加载是核心卖点**:Playwright 的 fixtures 按需初始化,不用就不创建,能节省测试执行时间;但传统 Proxy/getter 方案会导致异步 fixture 需要 `await`,破坏 API 体验
2. "偷看"函数参数是关键**:Playwright 在不调用测试函数的情况下,就能知道它需要哪些 fixture,这解决了"鸡生蛋"难题——要知道用哪些 fixture 才能准备它们,但准备前又不能运行测试
3. **`Function.prototype.toString()
是秘密武器**:Playwright 把测试函数转成字符串,用正则提取解构参数,因此强制要求 `async ({ page }) => 这种写法,否则直接抛错"First argument must use the object destructuring pattern"4. **解析逻辑相当 robust**:源码展示了
innerFixtureParameterNames 的实现,能正确处理普通函数、async 函数、生成器函数、箭头函数等多种声明方式,还能处理带默认值的复杂解构5. **压缩工具不会破坏它**:实测 Terser 和 esbuild 的 minify 只会把参数名缩短(如
foo → `o`),不会改解构语法,所以 Playwright 的正则解析依然能工作6. **魔法有代价**:函数组合(如 `noThrow(fn)
包装后传入)会失效,因为 `toString() 拿到的是包装函数的源码而非原始函数;这种"黑魔法"虽然 DX 很好,但违反了"最小惊讶原则"7. **作者态度很诚实**:认可 Playwright 团队的选择非常适合测试框架场景,但坦言这种魔法比个人期望的多了一点,想不出其他库有同样充分的理由采用此方案
URL:
https://ivakin.dev/blog/how-playwright-fixtures-work