# Testing

Test-driven development workflow for Noodle.

- Repository: https://github.com/poteto/noodle (577 stars)
- Category: Testing
- License: MIT
- Last updated: 2026-03-19
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add poteto/noodle --skill testing -g -a claude-code -y`
Codex: `npx skills add poteto/noodle --skill testing -g -a codex -y`
Cursor: `npx skills add poteto/noodle --skill testing -g -a cursor -y`
Gemini CLI: `npx skills add poteto/noodle --skill testing -g -a gemini-cli -y`

## Description

Test-driven development workflow for Noodle. Use when testing changes, writing tests, fixing bugs, creating fixtures, or running the test suite. Triggers: "test", "write a test", "fix this bug", "add a fixture", "run tests", "TDD", or any task involving verification of code changes.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Testing

Test-driven by default. Prove the problem before solving it.

## Core Workflow: Bug First

1. **Reproduce**, Run the failing scenario and observe the actual behavior
2. **Write a failing test**, Minimal reproduction as a test case
3. **Commit the failing test**, Use `Skill(commit)` with message like `test: reproduce #issue-description`
4. **Fix the code**, Only now attempt the fix
5. **Verify**, Run `pnpm test` and confirm the test passes
6. **Commit the fix**, Separate commit from the test

This applies to all bug fixes. The failing test proves the bug exists and prevents regressions.

## Fixture Tests

Noodle uses directory-based fixtures in `testdata/`. Read [references/fixtures.md](references/fixtures.md) for full format, helper API, and code patterns.

### Creating a New Fixture

```sh
./scripts/scaffold-fixture.sh <package-dir> <fixture-name> [state-count]
```

Fill in the generated `input.json`/`input.ndjson` and `expected.md`, then:

```sh
pnpm fixtures:hash:sync
```

### Bug Fixtures

See [references/fixtures.md](references/fixtures.md) for full bug fixture format (frontmatter fields, expected error sections, and the fix workflow).

## Key Commands

| Command | Purpose |
|---------|---------|
| `pnpm test` | Run all tests |
| `pnpm test:short` | Skip integration tests |
| `pnpm check` | Full local CI (test + vet + lint + fixtures) |
| `pnpm bugs` | List fixtures marked as known bugs |
| `pnpm fixtures:loop` | Verify loop fixtures match expected |
| `pnpm fixtures:loop:record` | Regenerate loop fixture expected output |
| `pnpm fixtures:hash` | Verify fixture input hashes |
| `pnpm fixtures:hash:sync` | Update fixture input hashes |
| `pnpm vet` | Run `go vet` |
| `pnpm lint:arch` | Architecture lint (file sizes, legacy patterns) |

## Running Specific Tests

```sh
# Single package
go test ./loop

# Single test
go test ./loop -run TestLoopDirectoryFixtures

# Bypass cache
go test -count=1 ./parse

# With race detector
go test -race ./...

The rest: https://github.com/poteto/noodle/blob/HEAD/.agents/skills/testing/SKILL.md
