docs: enhance TDD guidelines in CLAUDE.md and INSTRUCTIONS.md
This commit is contained in:
44
CLAUDE.md
44
CLAUDE.md
@@ -6,6 +6,29 @@ right knowledge.
|
||||
|
||||
---
|
||||
|
||||
## Default Workflow: Test-Driven Development (TDD)
|
||||
|
||||
> **Every implementation step in this project follows TDD. This is non-negotiable.**
|
||||
|
||||
The cycle for every step is:
|
||||
|
||||
| Phase | Action | Gate |
|
||||
|------------|-------------------------------------------------------------------------|------------------------------------|
|
||||
| **Red** | Write test file(s) for the step. Run the test suite. | New tests must **fail**. |
|
||||
| **Green** | Write the minimum implementation to make all tests pass. | All tests must **pass**. |
|
||||
| **Refactor** | Clean up the implementation. | Tests must stay **green**. |
|
||||
| **Done** | Mark step ✅ only when the full build is green. | `./gradlew build` / `npm run build && npm run test` |
|
||||
|
||||
**Rules:**
|
||||
- Never write implementation code before the test file exists and the tests fail.
|
||||
- Never mark a step Done unless the full test suite passes.
|
||||
- Test method names (Kotlin/JUnit): `should_[expectedBehavior]_when_[condition]`.
|
||||
- Backend mocking: **MockK** only (not Mockito).
|
||||
- Backend integration tests: `@SpringBootTest` with **H2 in-memory** database.
|
||||
- Frontend tests: **Vitest** + **React Testing Library**, mocked Axios.
|
||||
|
||||
---
|
||||
|
||||
## Project Overview
|
||||
|
||||
- **Type:** Monorepo (backend + frontend in the same repository)
|
||||
@@ -361,17 +384,32 @@ docker compose down
|
||||
|
||||
## Testing Guidelines
|
||||
|
||||
> **This project follows strict TDD.** For every implementation step, tests are written
|
||||
> first (Red), then the implementation is added until all tests pass (Green), then code is
|
||||
> cleaned up (Refactor). Never write implementation code before the tests exist and fail.
|
||||
|
||||
### TDD Workflow (apply to every step)
|
||||
1. **Red** — Write the test file(s). Run `./gradlew test` (backend) or `npm run test`
|
||||
(frontend) and confirm the new tests **fail** (compile errors are acceptable at this stage).
|
||||
2. **Green** — Write the minimum implementation needed to make all tests pass.
|
||||
3. **Refactor** — Clean up the implementation while keeping tests green.
|
||||
4. A step is only ✅ Done when `./gradlew build` (backend) or
|
||||
`npm run build && npm run test` (frontend) is fully green.
|
||||
|
||||
### Backend
|
||||
- Every service class must have a corresponding unit test class.
|
||||
- Every service class must have a corresponding unit test class **written before the service**.
|
||||
- Use **MockK** for mocking (not Mockito).
|
||||
- Integration tests use `@SpringBootTest` and an **H2 in-memory** database.
|
||||
- Test method names follow: `should_[expectedBehavior]_when_[condition]`.
|
||||
- Minimum 80% code coverage for service classes.
|
||||
- Test files live in `src/test/kotlin/` mirroring the `src/main/kotlin/` package structure.
|
||||
|
||||
### Frontend
|
||||
- Every page component must have at least a smoke test (renders without crashing).
|
||||
- Every page component must have at least a smoke test (renders without crashing),
|
||||
**written before the component**.
|
||||
- API layer functions must be tested with mocked Axios responses.
|
||||
- Use **Vitest** as the test runner and **React Testing Library** for component tests.
|
||||
- Test files live in `src/__tests__/` mirroring the `src/` structure.
|
||||
|
||||
---
|
||||
|
||||
@@ -458,6 +496,8 @@ BODY:
|
||||
- Branch naming: `feature/<short-description>`, `fix/<short-description>`, `chore/<short-description>`
|
||||
- Commit messages follow [Conventional Commits](https://www.conventionalcommits.org/): `feat:`, `fix:`, `chore:`, `docs:`, `test:`
|
||||
- Scope your commits: `feat(backend):`, `feat(frontend):`, `chore(docker):`
|
||||
- **TDD commit order per step:** first `test(<scope>): add failing tests for <step>`, then
|
||||
`feat(<scope>): implement <step> — all tests passing`.
|
||||
- PRs require all CI checks to pass before merging.
|
||||
- Never commit directly to `main`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user