docs: add TDD coding conventions
Red/Green/Refactor cycle is now mandatory for all development
This commit is contained in:
@@ -0,0 +1,103 @@
|
|||||||
|
# Gravl Coding Conventions
|
||||||
|
|
||||||
|
## Utvecklingsmetodik
|
||||||
|
|
||||||
|
### Red/Green TDD (OBLIGATORISKT)
|
||||||
|
|
||||||
|
All ny kod måste följa TDD-cykeln:
|
||||||
|
|
||||||
|
```
|
||||||
|
🔴 RED → 🟢 GREEN → 🔄 REFACTOR
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 1. 🔴 RED - Skriv test först
|
||||||
|
```javascript
|
||||||
|
// test/feature.test.js
|
||||||
|
describe('Feature', () => {
|
||||||
|
it('should do expected behavior', async () => {
|
||||||
|
const result = await feature.doSomething();
|
||||||
|
expect(result).toBe(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
**Kör testet - det MÅSTE faila!**
|
||||||
|
```bash
|
||||||
|
npm test -- --grep "Feature"
|
||||||
|
# ❌ FAIL (detta är rätt!)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. 🟢 GREEN - Minimal implementation
|
||||||
|
Skriv bara tillräckligt med kod för att testet passerar:
|
||||||
|
```javascript
|
||||||
|
// src/feature.js
|
||||||
|
export function doSomething() {
|
||||||
|
return expected; // Minimal lösning
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Kör testet igen:**
|
||||||
|
```bash
|
||||||
|
npm test -- --grep "Feature"
|
||||||
|
# ✅ PASS
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. 🔄 REFACTOR - Förbättra
|
||||||
|
Nu kan du:
|
||||||
|
- Refaktorera för clean code
|
||||||
|
- Extrahera funktioner
|
||||||
|
- Förbättra namngivning
|
||||||
|
- Ta bort duplicering
|
||||||
|
|
||||||
|
**Kör testerna kontinuerligt:**
|
||||||
|
```bash
|
||||||
|
npm test
|
||||||
|
# ✅ Alla test måste fortfarande passa
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Teststruktur
|
||||||
|
|
||||||
|
```
|
||||||
|
/workspace/gravl/
|
||||||
|
├── src/
|
||||||
|
│ └── components/
|
||||||
|
├── server/
|
||||||
|
│ └── routes/
|
||||||
|
└── test/
|
||||||
|
├── unit/ # Enhetstester
|
||||||
|
├── integration/ # API-tester
|
||||||
|
└── e2e/ # End-to-end
|
||||||
|
```
|
||||||
|
|
||||||
|
## Namnkonventioner
|
||||||
|
|
||||||
|
### Tester
|
||||||
|
- `[feature].test.js` - Unit tests
|
||||||
|
- `[feature].integration.test.js` - Integration tests
|
||||||
|
- Describe-block: Noun (vad testas)
|
||||||
|
- It-block: "should [verb] [expected outcome]"
|
||||||
|
|
||||||
|
### Commits
|
||||||
|
```
|
||||||
|
test: add failing test for [feature]
|
||||||
|
feat: implement [feature] to pass tests
|
||||||
|
refactor: clean up [feature] implementation
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Workflow för kodningsagenter
|
||||||
|
|
||||||
|
1. **Få uppgift** från Gravl PM
|
||||||
|
2. **Läs spec** i docs/current-task.md
|
||||||
|
3. **Skriv failing test** - visa PM
|
||||||
|
4. **Implementera** tills test passerar
|
||||||
|
5. **Refaktorera** om nödvändigt
|
||||||
|
6. **Commit** med rätt prefix
|
||||||
|
7. **Rapportera** till PM
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Uppdaterad: 2026-02-28*
|
||||||
Reference in New Issue
Block a user