- Remove TestFindJSONLPathDefault from .test-skip (now passes) - Add explanatory comments to 24 ignored error locations in cmd/bd: - Cobra flag methods (MarkHidden, MarkRequired, MarkDeprecated) - Best-effort cleanup/close operations - Process signaling operations Part of code health review epic bd-tggf. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.0 KiB
4.0 KiB
Testing Guide
Overview
The beads project has a comprehensive test suite with ~41,000 lines of code across 205 files in cmd/bd alone.
Test Performance
- Total test time: ~3 minutes (excluding broken tests)
- Package count: 20+ packages with tests
- Compilation overhead: ~180 seconds (most of the total time)
- Individual test time: Only ~3.8 seconds combined for all 313 tests in cmd/bd
Running Tests
Quick Start
# Run all tests (auto-skips known broken tests)
make test
# Or directly:
./scripts/test.sh
# Run specific package
./scripts/test.sh ./cmd/bd/...
# Run specific test pattern
./scripts/test.sh -run TestCreate ./cmd/bd/...
# Verbose output
./scripts/test.sh -v
Environment Variables
# Set custom timeout (default: 3m)
TEST_TIMEOUT=5m ./scripts/test.sh
# Enable verbose output
TEST_VERBOSE=1 ./scripts/test.sh
# Run specific pattern
TEST_RUN=TestCreate ./scripts/test.sh
Advanced Usage
# Skip additional tests beyond .test-skip
./scripts/test.sh -skip SomeSlowTest
# Run with custom timeout
./scripts/test.sh -timeout 5m
# Combine flags
./scripts/test.sh -v -run TestCreate ./internal/beads/...
Known Broken Tests
Tests in .test-skip are automatically skipped. Current broken tests:
- TestFallbackToDirectModeEnablesFlush (GH #355)
- Location:
cmd/bd/direct_mode_test.go:14 - Issue: Database deadlock, hangs for 5 minutes
- Impact: Makes test suite extremely slow
- Location:
For Claude Code / AI Agents
When running tests during development:
Best Practices
-
Use the test script: Always use
./scripts/test.shinstead ofgo testdirectly- Automatically skips known broken tests
- Uses appropriate timeouts
- Consistent with CI/CD
-
Target specific tests when possible:
# Instead of running everything: ./scripts/test.sh # Run just what you changed: ./scripts/test.sh -run TestSpecificFeature ./cmd/bd/... -
Compilation is the bottleneck:
- The 180-second compilation time dominates
- Individual tests are fast
- Use
-runto avoid recompiling unnecessarily
-
Check for new failures:
# If you see a new failure, check if it's known: cat .test-skip
Adding Tests to Skip List
If you discover a broken test:
- File a GitHub issue documenting the problem
- Add to
.test-skip:# Issue #NNN: Brief description TestNameToSkip - Tests in
.test-skipsupport regex patterns
Test Organization
Slowest Tests (>0.05s)
The top slow tests in cmd/bd:
TestDoctorWithBeadsDir(1.68s) - Only significantly slow testTestFlushManagerDebouncing(0.21s)TestDebouncer_*tests (0.06-0.12s each) - Intentional sleeps for concurrency testingTestMultiWorkspaceDeletionSync(0.12s)
Most tests are <0.01s and very fast.
Package Structure
cmd/bd/ - Main CLI tests (82 test files, most of the suite)
internal/beads/ - Core beads library tests
internal/storage/ - Storage backend tests (SQLite, memory)
internal/rpc/ - RPC protocol tests
internal/*/ - Various internal package tests
Continuous Integration
The test script is designed to work seamlessly with CI/CD:
# Example GitHub Actions
- name: Run tests
run: make test
Debugging Test Failures
Get detailed output
./scripts/test.sh -v ./path/to/package/...
Run a single test
./scripts/test.sh -run '^TestExactName$' ./cmd/bd/...
Check which tests are being skipped
./scripts/test.sh 2>&1 | head -5
Output shows:
Running: go test -timeout 3m -skip TestFoo|TestBar ./...
Skipping: TestFoo|TestBar
Contributing
When adding new tests:
- Keep tests fast (<0.1s if possible)
- Use
t.Parallel()for independent tests - Clean up resources in
t.Cleanup()ordefer - Avoid sleeps unless testing concurrency
When tests break:
- Fix them if possible
- If unfixable right now, file an issue and add to
.test-skip - Document the issue in
.test-skipwith issue number