Now vibe coding, so learning hammer FE ?
《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
《AI编码代理生产级工程技能集》
标签:#AI辅助编程 #开发工具 #AI_Agent #工程规范 #ClaudeCode #Cursor #代码审查 #测试驱动开发 #CI_CD
总结:
这是一个为AI编码代理(如Claude Code、Cursor、GitHub Copilot等)设计的生产级工程技能仓库,由Addy Osmani维护。它将资深工程师在真实项目中的工作流、质量门禁和最佳实践编码为20个结构化技能,覆盖从需求定义到上线发布的完整开发生命周期,让AI代理在每次编码时都能保持一致的专业水准,避免走"最短路径"而跳过测试、审查等关键环节。
文章要点:
- 六阶段开发流水线:从Define(定义需求)→ Plan(拆解任务)→ Build(增量编码)→ Verify(验证测试)→ Review(质量门禁)→ Ship(安全发布),像工厂流水线一样规范AI的每一步动作
- 7个斜杠命令即开即用:
- 20个实战技能全覆盖:从API设计、前端工程、TDD测试驱动,到性能优化、安全加固、Git工作流、CI/CD自动化,每个技能都自带步骤清单、验证标准和"反找借口"表格(比如AI想跳过测试时,会被技能里的反驳论据怼回去😄)
- 多工具无缝兼容:Claude Code一键插件安装,Cursor复制到rules目录,Gemini CLI、Windsurf、GitHub Copilot、Kiro等主流AI编程工具都能直接用,技能就是纯Markdown,通吃所有支持系统提示词的代理
- Google工程文化落地:融入了Hyrum定律、Beyonce规则、测试金字塔、Chesterton围栏等Google实战智慧,不是泛泛而谈的理论,而是嵌入到每一步工作流中的可执行标准
文章URL:https://github.com/addyosmani/agent-skills
标签:#AI辅助编程 #开发工具 #AI_Agent #工程规范 #ClaudeCode #Cursor #代码审查 #测试驱动开发 #CI_CD
总结:
这是一个为AI编码代理(如Claude Code、Cursor、GitHub Copilot等)设计的生产级工程技能仓库,由Addy Osmani维护。它将资深工程师在真实项目中的工作流、质量门禁和最佳实践编码为20个结构化技能,覆盖从需求定义到上线发布的完整开发生命周期,让AI代理在每次编码时都能保持一致的专业水准,避免走"最短路径"而跳过测试、审查等关键环节。
文章要点:
- 六阶段开发流水线:从Define(定义需求)→ Plan(拆解任务)→ Build(增量编码)→ Verify(验证测试)→ Review(质量门禁)→ Ship(安全发布),像工厂流水线一样规范AI的每一步动作
- 7个斜杠命令即开即用:
/spec写需求文档、/build增量开发、/test跑测试、/review代码审查……输入命令就能自动激活对应的技能组合,非常顺手- 20个实战技能全覆盖:从API设计、前端工程、TDD测试驱动,到性能优化、安全加固、Git工作流、CI/CD自动化,每个技能都自带步骤清单、验证标准和"反找借口"表格(比如AI想跳过测试时,会被技能里的反驳论据怼回去😄)
- 多工具无缝兼容:Claude Code一键插件安装,Cursor复制到rules目录,Gemini CLI、Windsurf、GitHub Copilot、Kiro等主流AI编程工具都能直接用,技能就是纯Markdown,通吃所有支持系统提示词的代理
- Google工程文化落地:融入了Hyrum定律、Beyonce规则、测试金字塔、Chesterton围栏等Google实战智慧,不是泛泛而谈的理论,而是嵌入到每一步工作流中的可执行标准
文章URL:https://github.com/addyosmani/agent-skills