unit-test
Write Jest unit tests following project conventions with proper stubs and assertions.
SKILL.md.claude/skills/unit-test/SKILL.md
GitHubFile naming: Use
*.spec.tsfor unit tests and*.e2e.spec.tsfor end-to-end tests. Place test files alongside the source file they test.Test framework: Use Vitest. Test environment variables are loaded from
.env-files/.env.test.Test data generation:
- Use
@faker-js/fakerfor random synthetic data (names, dates, numbers) - Use
zockerwithcreateStubFromSchema()for generating data from Zod schemas - Import shared test helpers from
@carrot-fndn/shared/testing:stubRuleInput(),stubDocument(),createStubFromSchema() - NEVER use real data (company names, tax IDs, license plates, addresses, PII)
- Use
Test structure:
- Use
describeblocks to group related tests - Use
it.eachfor table-driven tests when testing multiple similar scenarios - Use
expect.objectContaining()for partial assertions on objects - Keep test descriptions clear and descriptive using
shouldlanguage
- Use
Rule processor tests: Follow the standard pattern:
{rule-name}/ ├── {rule-name}.processor.spec.ts # Unit tests for evaluateResult() ├── {rule-name}.lambda.e2e.spec.ts # E2E tests for the Lambda handler └── {rule-name}.test-cases.ts # Shared test data and fixturesAssertions:
- Test both success and failure paths
- Verify error messages and types, not just that errors are thrown
- For rule processors, test that
evaluateResult()returns the expectedRuleOutput
Run and verify: Execute
pnpm nx test <project-name>to run tests for the specific project. Ensure all tests pass before finishing.