Claude-skill-registry ExUnit Test Framework
Execute and generate ExUnit tests for Elixir projects with setup callbacks, describe blocks, and async testing support
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/exunit-test" ~/.claude/skills/majiayu000-claude-skill-registry-exunit-test-framework && rm -rf "$T"
manifest:
skills/data/exunit-test/SKILL.mdsource content
ExUnit Test Framework
Purpose
Provide ExUnit test execution and generation for Elixir projects, supporting:
- Test file generation from templates (_test.exs files)
- Test execution with Mix test integration
- Setup and setup_all callbacks
- Describe blocks for test organization
- Async testing support
Usage
Generate Test File
Create a test file from a bug report or feature description:
elixir generate-test.exs \ --source lib/calculator.ex \ --output test/calculator_test.exs \ --module Calculator \ --description "Division by zero error"
Execute Tests
Run ExUnit tests and return structured results:
elixir run-test.exs \ --file test/calculator_test.exs \ --format json
Command Line Options
generate-test.exs
- Source file to test (required)--source <path>
- Output test file path (required)--output <path>
- Module name to test (required)--module <name>
- Bug description or test purpose--description <text>
- Enable async testing (default: false)--async
run-test.exs
- Test file to execute (required)--file <path>
- Output format (default: json)--format <json|doc>
- Run with detailed trace--trace
Output Format
Test Generation
Returns JSON with generated test file information:
{ "success": true, "testFile": "test/calculator_test.exs", "testCount": 1, "template": "unit-test", "async": false }
Test Execution
Returns JSON with test results:
{ "success": false, "passed": 2, "failed": 1, "total": 3, "duration": 0.234, "failures": [ { "test": "test divide by zero raises ArithmeticError", "error": "Expected ArithmeticError to be raised", "file": "test/calculator_test.exs", "line": 15 } ] }
ExUnit Test Structure
Basic Test
defmodule CalculatorTest do use ExUnit.Case test "adds two numbers" do assert Calculator.add(1, 2) == 3 end end
With Describe Blocks
defmodule CalculatorTest do use ExUnit.Case describe "add/2" do test "adds positive numbers" do assert Calculator.add(1, 2) == 3 end test "adds negative numbers" do assert Calculator.add(-1, -2) == -3 end end describe "divide/2" do test "divides numbers" do assert Calculator.divide(6, 2) == 3 end test "raises on division by zero" do assert_raise ArithmeticError, fn -> Calculator.divide(1, 0) end end end end
With Setup Callbacks
defmodule UserTest do use ExUnit.Case setup do user = %User{name: "John", email: "john@example.com"} {:ok, user: user} end test "user has name", %{user: user} do assert user.name == "John" end test "user has email", %{user: user} do assert user.email == "john@example.com" end end
Async Testing
defmodule FastTest do use ExUnit.Case, async: true test "runs in parallel with other async tests" do assert 1 + 1 == 2 end end
Common Assertions
- Ensures expression is truthyassert expr
- Ensures expression is falsyrefute expr
- Expects exceptionassert_raise Exception, fn -> ... end
- Asserts message was receivedassert_received message
- Equality assertion (preferred over pattern matching)assert x == y
Integration with deep-debugger
The deep-debugger agent uses this skill for Elixir projects:
- Test Recreation: Generate failing test from bug report
- Test Validation: Execute test to verify it fails consistently
- Fix Verification: Re-run test after fix to ensure it passes
Example workflow:
1. deep-debugger receives bug report for Elixir project 2. Invokes test-detector to identify ExUnit 3. Invokes exunit-test/generate-test.exs to create failing test 4. Invokes exunit-test/run-test.exs to validate test fails 5. Delegates fix to elixir-phoenix-expert agent 6. Invokes exunit-test/run-test.exs to verify fix
Dependencies
Requires Elixir and Mix to be installed:
elixir --version # Should be 1.12 or higher mix --version # Elixir's build tool
ExUnit is built into Elixir, no additional installation needed.
File Naming Conventions
- Test files must end with
_test.exs - Mirror source file structure:
→lib/calculator.extest/calculator_test.exs - Test helper:
(required)test/test_helper.exs
Error Handling
Test Generation Errors
{ "success": false, "error": "Source file not found", "file": "lib/missing.ex" }
Test Execution Errors
{ "success": false, "error": "Mix test failed", "output": "** (CompileError) ..." }
See Also
- ExUnit Documentation
- Elixir School Testing Guide
- templates/ - Test file templates