dbt-test
Add schema tests, unit tests, and data quality checks to dbt models. Use when validating data integrity, adding test definitions to schema.yml, writing unit tests, or practicing test-driven development in dbt. Powered by altimate-dbt.
Works with
---
name: dbt-test
description: Add schema tests, unit tests, and data quality checks to dbt models. Use when validating data integrity, adding test definitions to schema.yml, writing unit tests, or practicing test-driven development in dbt. Powered by altimate-dbt.
license: MIT
---
# 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:
1. The data has a real quality issue (fix the data or the model)
2. The test expectation is wrong (update the test with justification)
3. 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
```bash
altimate-dbt columns --model <name>
altimate-dbt column-values --model <name> --column <col>
```
### 2. Read Existing Tests
```bash
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](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
```bash
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](references/unit-test-guide.md) for the full unit test framework.
### Quick Pattern
```yaml
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](references/altimate-dbt-commands.md) | Need the full CLI reference |
| [references/schema-test-patterns.md](references/schema-test-patterns.md) | Adding schema.yml tests by column pattern |
| [references/unit-test-guide.md](references/unit-test-guide.md) | Writing dbt unit tests |
| [references/custom-tests.md](references/custom-tests.md) | Creating generic or singular tests |More Testing skills
tdd
mattpocock/skills
Test-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.
setup-pre-commit
mattpocock/skills
Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.

