exunit-code-review

Async tests, setup, describe, tags references/exunit-patterns.md

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "exunit-code-review" with this command: npx skills add existential-birds/beagle/existential-birds-beagle-exunit-code-review

ExUnit Code Review

Quick Reference

Issue Type Reference

Async tests, setup, describe, tags references/exunit-patterns.md

Behavior-based mocking, expectations references/mox-boundaries.md

Bypass, Swoosh, Oban testing references/test-adapters.md

What to mock vs real, Ecto sandbox references/integration-tests.md

Mock Boundary Philosophy

Mock at external boundaries:

  • HTTP clients, external APIs, third-party services

  • Slow resources: file system, email, job queues

  • Non-deterministic: DateTime.utc_now(), :rand

DO NOT mock internal code:

  • Contexts, schemas, GenServers

  • Internal modules, PubSub

  • Anything you wrote

Review Checklist

Test Structure

  • Tests are async: true unless sharing database state

  • Describe-blocks group related tests

  • Setup extracts common test data

  • Tests have clear arrange/act/assert structure

Mocking

  • Mox used for external boundaries (HTTP, APIs)

  • Behaviors defined for mockable interfaces

  • No mocking of internal modules

  • verify_on_exit! in setup for strict mocking

Test Adapters

  • Bypass for HTTP endpoint mocking

  • Swoosh.TestAdapter for email testing

  • Oban.Testing for background job assertions

Database

  • Ecto.Adapters.SQL.Sandbox for isolation

  • Async tests don't share database state

  • Fixtures/factories used consistently

Valid Patterns (Do NOT Flag)

  • Mock in unit test, real in integration - Different test levels have different needs

  • Not mocking database in integration tests - Database is internal

  • Simple inline test data - Not everything needs factories

  • Testing private functions via public API - Correct approach

Context-Sensitive Rules

Issue Flag ONLY IF

Not async Test actually needs shared state

Missing mock External call exists AND no mock/bypass

Mock internal Module being mocked is internal code

Before Submitting Findings

Use the issue format: [FILE:LINE] ISSUE_TITLE for each finding.

Load and follow review-verification-protocol before reporting any issue.

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

langgraph-code-review

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

docling

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python-code-review

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

fastapi-code-review

No summary provided by upstream source.

Repository SourceNeeds Review