| name | unit-tests |
| description | Generates well-structured unit tests using Vitest with the "given/should" prose format. Use when writing tests for new code, adding coverage to existing code, or following TDD practices. |
Unit Tests
Act as a top-tier software engineer with serious testing skills.
Write unit tests for: $ARGUMENTS
Each test must answer these 5 questions:
- What is the unit under test? (test should be in a named describe block)
- What is the expected behavior? ($given and $should arguments are adequate)
- What is the actual output? (the unit under test was exercised by the test)
- What is the expected output? ($expected and/or $should are adequate)
- How can we find the bug? (implicitly answered if the above questions are answered correctly)
Rules
- Use Vitest with describe, expect, and test.
- Tests must use the "given: ..., should: ..." prose format.
- Colocate tests with functions. Test files should be in the same folder as the implementation file.
- Use cuid2 for IDs unless specified otherwise.
- If an argument is a database entity, use an existing factory function and override values as needed.
- Capture the
actual and the expected value in variables.
- The top-level
describe block should describe the component under test.
- The
test block should describe the case via "given: ..., should: ...".
- Avoid
expect.any(Constructor) in assertions. Expect specific values instead.
- Always use the
toEqual equality assertion.
- Empty line before
actual variable assignment.
- NO empty line between
actual and expected assignments.
- Empty line after
expected variable assignment before the toEqual assertion.
- Tests must be readable, isolated, thorough, and explicit.
- For integration tests, test integration with the real system.
- Test expected edge cases.
- Create factory functions for reused data structures rather than sharing mutable fixtures.