test-component

Writes and fixes tests for your Python code so you catch bugs before they reach customers.

Installation
Run `npx skills add "https://github.com/keboola/ai-kit" --skill "test-component"` to install this skill, then follow its SKILL.md instructions for my next request.

Paste this into Claude Code, Cursor, or any agent that can run commands.

SKILL.mdShow the author's original SKILL.md
---
name: test-component
description: >
  Expert agent for writing and maintaining tests for Keboola Python components.
  Use for any testing work — adding tests, fixing tests, improving coverage, setting up
  VCR functional tests. Covers datadir tests, unit tests, mock-based tests, and VCR
  recording with keboola.datadirtest. Triggers whenever testing is mentioned or needed
  for a Keboola component, including /generate-vcr-tests.
tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
model: sonnet
color: green
---

# Keboola Component Tester

## Testing approach

Three levels, in priority order:

1. **Datadir tests** — functional tests using KBC_DATADIR structure; the primary method for all components
2. **Unit tests** — isolated logic tests for transformations, validation, config parsing
3. **VCR functional tests** — for components that call external HTTP APIs (preferred over manual mocks for extractors/writers)

## Choosing VCR vs mocks

**Use VCR** (`keboola.datadirtest`) when the component makes external HTTP calls:
- Records real API interactions once → replays deterministically in CI without credentials
- More realistic than hand-rolled mocks; catches API contract changes
- Required for extractors; recommended for writers that call external APIs

**Use mocks** (`unittest.mock`) when:
- Testing pure logic, transformation, or validation code
- Writing unit tests for individual functions
- The component has no HTTP calls (applications, pure transformations)

## VCR setup workflow

1. Add `keboola.datadirtest>=2.0.0` to `pyproject.toml` dev dependencies, run `uv sync -U`
2. Copy `tests/test_functional.py` from `component-developer:component-defaults` assets
3. Read component (`src/component.py`, `src/configuration.py`, `component_config/configSchema.json`) and build `tests/setup/configs.json` — see [vcr-configs-format.md](references/vcr-configs-format.md)
4. For authenticated APIs: ask user for real credentials → `secrets.json` (verify it's in `.gitignore`)
5. Scaffold to record: `uv run python -m keboola.datadirtest scaffold [--secrets secrets.json] [--chain-state]`
6. Check cassettes for unsanitized dynamic values — see [vcr-sanitizers.md](references/vcr-sanitizers.md)
7. Update `.gitignore`, `Dockerfile` (`COPY tests/ tests`), and `push.yml` (use `python -m pytest`)
8. Verify: `python -m pytest` locally and in Docker

See [vcr-quickstart.md](references/vcr-quickstart.md) for all scaffold commands. See [vcr-troubleshooting.md](references/vcr-troubleshooting.md) for common failures.

## References

| File | When to read |
|------|-------------|
| `references/datadir-tests.md` | Setting up datadir tests — directory structure, config.json, output assertions, state, error cases |
| `references/unit-and-mock-tests.md` | Unit tests, mocking patterns, freezegun, by component type |
| `references/vcr-configs-format.md` | Building configs.json — wrapped format, OAuth, writers, coverage guidelines |
| `references/vcr-sanitizers.md` | Adding VCR_SANITIZERS — DefaultSanitizer, ResponseUrlSanitizer, QueryParamSanitizer |
| `references/vcr-quickstart.md` | All scaffold/record commands and repo layout |
| `references/vcr-troubleshooting.md` | Common VCR failures and fixes |
| `references/vcr-debug-from-platform.md` | Regression tests from Keboola platform debug job output (stage_output.zip) |

Ships with 7 supporting files:

  • references/datadir-tests.md
  • references/unit-and-mock-tests.md
  • references/vcr-configs-format.md
  • references/vcr-debug-from-platform.md
  • references/vcr-quickstart.md
  • references/vcr-sanitizers.md
  • references/vcr-troubleshooting.md

Mirrored from the author's public source. Install counts from the open skills registry.

The systems behind these skills get built for partners every week.

Partner with us