# Test Stages

> Staged test organization and testing guidelines for Mycelia Use when this capability is needed.

- Skill: `tomevault-io/test-stages` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/test-stages`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/test-stages/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/test-stages

---


# Mycelia Test Stage Organization

The test suite is tiered by workflow stage.

## Test Stage Directories

1. `test/1_data_acquisition/` - Data loading and acquisition
2. `test/2_preprocessing_qc/` - Quality control and preprocessing
3. `test/3_feature_extraction_kmer/` - K-mer analysis and feature extraction
4. `test/4_assembly/` - Assembly algorithms
5. `test/5_validation/` - Validation and verification
6. `test/6_annotation/` - Annotation workflows
7. `test/7_comparative_pangenomics/` - Comparative and pangenomic analysis
8. `test/8_tool_integration/` - External tool integration

Additional directories:
- `test/in_development/` - Opt-in experimental tests
- `test/deprecated/` - Legacy tests (do not use)

## Adding New Tests

1. Place tests in the relevant stage directory
2. Name files after the feature (e.g., `assembly_merging.jl`)
3. Use `Test.@testset` with descriptive labels
4. Use small fixtures from `assembly_test_data/`
5. Use `StableRNGs` for deterministic seeds

Example:
```julia
import Test
import StableRNGs

Test.@testset "Assembly Merging" begin
    rng = StableRNGs.StableRNG(42)
    # Test code with deterministic randomness
end
```

## Test Commands

```bash
# Core tests (Aqua + optional JET)
julia --project=. -e "import Pkg; Pkg.test()"

# Full pipeline tests
MYCELIA_RUN_ALL=true julia --project=. -e "import Pkg; Pkg.test()"

# External tool tests
MYCELIA_RUN_EXTERNAL=true julia --project=. -e "import Pkg; Pkg.test()"

# Coverage (disable precompilation for accurate line hits)
MYCELIA_RUN_ALL=true MYCELIA_RUN_EXTERNAL=true \
  julia --project=. --compiled-modules=no -e "import Pkg; Pkg.test(coverage=true)"

# Static analysis
julia --project=. test/jet.jl
```

## Testing Rules

- **NEVER disable tests because functionality is broken** - fix the implementation first
- Use `Test.@test_skip` ONLY for explicitly planned but unimplemented features
- When debugging tests gated by environment flags (for example `MYCELIA_RUN_EXTERNAL`), enable them by default unless the user explicitly opts out
- External tool tests must run with `MYCELIA_RUN_EXTERNAL=true` without extra flags
- Use simulated inputs and default database paths where possible
- Extended tutorials/benchmarks are opt-in; note runtime or external-tool requirements

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/cjprybol) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-12 -->

