dbt-test
dbt Testing
Requirements
Agent: builder or migrator (requires file write access)
Tools used: bash (runs altimate-dbt commands), read, glob, write, edit, altimate_core_testgen, altimate_core_validate
When to Use This Skill
Use when the user wants to:
- Add tests to a model's schema.yml (unique, not_null, relationships, accepted_values)
- Write dbt unit tests (mock inputs → expected outputs)
- Create custom generic or singular tests
- Debug why a test is failing
- Practice test-driven development in dbt
Do NOT use for:
- Creating or modifying model SQL → use
dbt-develop - Writing model descriptions → use
dbt-docs - Debugging build/compilation errors → use
dbt-troubleshoot
The Iron Rule
Never modify a test to make it pass without understanding why it's failing.
A failing test is information. It means either:
- The data has a real quality issue (fix the data or the model)
- The test expectation is wrong (update the test with justification)
- The model logic is wrong (fix the model)
Option 2 requires explicit user confirmation. Do not silently weaken tests.
Schema Test Workflow
1. Discover Columns
altimate-dbt columns --model <name>
altimate-dbt column-values --model <name> --column <col>
2. Read Existing Tests
glob models/**/*schema*.yml models/**/*_models.yml
read <yaml_file>
3. Generate Tests
Auto-generate with altimate_core_testgen: Pass the compiled SQL and schema to generate boundary-value, NULL-handling, and edge-case test assertions automatically. This produces executable test SQL covering cases you might miss manually.
altimate_core_testgen(sql: <compiled_sql>, schema_context: <schema_object>)
Review the generated tests — keep what makes sense, discard trivial ones. Then apply test rules based on column patterns — see references/schema-test-patterns.md.
4. Write YAML
Merge into existing schema.yml (don't duplicate). Use edit for existing files, write for new ones.
5. Validate SQL
Before running, validate the compiled model SQL to catch syntax and schema errors early:
altimate_core_validate(sql: <compiled_sql>, schema_context: <schema_object>)
6. Run Tests
altimate-dbt test --model <name> # run tests for this model
altimate-dbt build --model <name> # build + test together
Unit Test Workflow
For automated unit test generation, use the dbt-unit-tests skill instead. It analyzes model SQL, generates type-correct mock data, and assembles complete YAML automatically.
See references/unit-test-guide.md for the full unit test framework.
Quick Pattern
unit_tests:
- name: test_order_total_calculation
model: fct_orders
given:
- input: ref('stg_orders')
rows:
- { order_id: 1, quantity: 3, unit_price: 10.00 }
- { order_id: 2, quantity: 1, unit_price: 25.00 }
expect:
rows:
- { order_id: 1, order_total: 30.00 }
- { order_id: 2, order_total: 25.00 }
Common Mistakes
| Mistake | Fix |
|---|---|
Testing every column with not_null |
Only test columns that should never be null. Think about what NULL means. |
Missing unique test on primary keys |
Every primary key needs unique + not_null |
accepted_values with incomplete list |
Use altimate-dbt column-values to discover real values first |
| Modifying a test to make it pass | Understand WHY it fails first. The test might be right. |
No relationships test on foreign keys |
Add relationships: {to: ref('parent'), field: parent_id} |
| Unit testing trivial logic | Don't unit test SELECT a, b FROM source. Test calculations and business logic. |
Reference Guides
| Guide | Use When |
|---|---|
| references/altimate-dbt-commands.md | Need the full CLI reference |
| references/schema-test-patterns.md | Adding schema.yml tests by column pattern |
| references/unit-test-guide.md | Writing dbt unit tests |
| references/custom-tests.md | Creating generic or singular tests |
More from altimateai/altimate-code
data-viz
>
6schema-migration
Analyze DDL migrations for data loss risks — type narrowing, missing defaults, dropped constraints, breaking column changes. Use before applying schema changes to production.
3dbt-unit-tests
Generate dbt unit tests automatically for any model. Analyzes SQL logic (CASE/WHEN, JOINs, window functions, NULLs), creates type-correct mock inputs from manifest schema, and assembles complete YAML. Use when a user says "generate tests", "add unit tests", "test this model", or "test coverage" for dbt models.
3dbt-docs
Document dbt models and columns in schema.yml with business context — model descriptions, column definitions, and doc blocks. Use when adding or improving documentation for discoverability. Powered by altimate-dbt.
2sql-review
Pre-merge SQL quality gate — lint 26 anti-patterns, grade readability/performance A-F, validate syntax, and scan for injection threats. Use before committing or reviewing SQL changes.
2dbt-troubleshoot
Debug dbt errors — compilation failures, runtime database errors, test failures, wrong data, and performance issues. Use when something is broken, producing wrong results, or failing to build. Powered by altimate-dbt.
2