关于 testing
testing 是面向 Elixir 项目的测试速查技能,涵盖测试用例选择、异步行为、数据库隔离、Mock 和工厂模式。它提供 ExUnit、Mox 与 LiveView 测试的实用规则和模式。
主要功能
- 01按测试类型选择测试用例
- 02遵循异步与 Sandbox 指引
- 03明确 Mock 的使用边界
- 04恰当选择 build 或 insert
- 05参考 ExUnit、Mox 和 LiveView 模式
适用场景
- 01为控制器或上下文设置测试
- 02测试 LiveView 行为
- 03不用 sleep 处理异步消息
- 04判断工厂是否需要持久化记录
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oliver-kriska/ claude-elixir-phoenix --skill testing安装后在 Claude Code 中输入/testing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/exunit-patterns.mdfactory-patterns.mdliveview-testing.mdmox-patterns.md详细介绍
Elixir 测试参考
Ash 项目:使用
DataCase和Ash.Test辅助工具;通过域代码接口测试操作,而不是直接调用Repo。请参阅ash-framework技能。
Elixir 测试模式速查。
铁律——绝不可违反
- 默认启用异步——除非测试会修改全局状态,否则使用
async: true - Sandbox 隔离——所有数据库测试都使用 Ecto.Adapters.SQL.Sandbox
- 只在边界处模拟——绝不模拟数据库、内部模块或标准库
- 行为作为契约——所有模拟都必须实现已定义的
@callback行为 - 默认构建——在工厂中使用
build/2;只有需要数据库时才使用insert/2 - 禁止 PROCESS.SLEEP——异步操作使用带超时的
assert_receive - VERIFY_ON_EXIT!——在 Mox 测试设置中始终调用
- 工厂匹配架构必填字段——工厂定义必须包含架构变更集中所有
validate_required字段。缺少字段会导致一连串测试失败
快速决策
使用哪种测试用例?
| 测试内容 | 使用 |
|---|---|
| 控制器/API | use MyAppWeb.ConnCase |
| 上下文/架构 | use MyApp.DataCase |
| LiveView | use MyAppWeb.ConnCase + import Phoenix.LiveViewTest |
| 纯逻辑 | use ExUnit.Case, async: true |
何时使用 async: true?
- ✅ 纯函数,无共享状态
- ✅ 使用 Sandbox 的数据库测试(PostgreSQL)
- ❌ 修改
Application.put_env的测试 - ❌ 使用 Mox 全局模式的测试
是否要模拟?
- ✅ 模拟:外部 API、邮件服务、文件存储
- ❌ 不要模拟:数据库、内部模块、标准库
使用 build() 还是 insert()?
- 默认使用
build()以提升速度 - 只有需要数据库 ID、约束或持久化关联时才使用
insert()
快速模式
# Setup chain
setup [:create_user, :authenticate]
# Pattern matching assertion
assert {:ok, %User{name: name}} = create_user(attrs)
# Async message assertion
assert_receive {:user_created, _}, 5000
# Mox setup
setup :verify_on_exit!
expect(MockAPI, :call, fn _ -> {:ok, "data"} end)
# LiveView async
html = render_async(view) # MUST call for assign_async
常见反模式
| 错误 | 正确 |
|---|---|
Process.sleep(100) | assert_receive {:done, _}, 5000 |
在工厂中使用 insert(:user) | 在工厂中使用 build(:user) |
使用 set_mox_global() 时设置 async: true | async: false |
| 模拟内部模块 | 通过公共 API 测试 |
参考资料
如需了解详细模式,请参阅:
${CLAUDE_SKILL_DIR}/references/exunit-patterns.md- 设置、断言、标签${CLAUDE_SKILL_DIR}/references/mox-patterns.md- 行为、expect/stub、异步${CLAUDE_SKILL_DIR}/references/liveview-testing.md- 表单、异步、上传${CLAUDE_SKILL_DIR}/references/factory-patterns.md- ExMachina、序列、特征
评论
支持 Markdown