About test-component
A testing guide for developers of Keboola Python components. It covers datadir, unit, and VCR-based functional tests, with setup and troubleshooting references.
Key features
- 01Datadir functional tests
- 02Unit tests and mocks
- 03VCR recording and replay
- 04Test configuration and scaffolding
- 05Test troubleshooting references
Use cases
- 01Check component inputs, outputs, and state
- 02Test extractors that call external APIs
- 03Write isolated tests for pure logic
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ keboola/ ai-kit --skill test-componentAfter installing, type/test-componentin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/datadir-tests.mdunit-and-mock-tests.mdvcr-configs-format.mdvcr-debug-from-platform.mdvcr-quickstart.mdvcr-sanitizers.mdvcr-troubleshooting.mdDetails
From the project READMEKeboola Component Tester
Testing approach
Three levels, in priority order:
- Datadir tests — functional tests using KBC_DATADIR structure; the primary method for all components
- Unit tests — isolated logic tests for transformations, validation, config parsing
- 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
- Add
keboola.datadirtest>=2.0.0topyproject.tomldev dependencies, runuv sync -U - Copy
tests/test_functional.pyfromcomponent-developer:component-defaultsassets - Read component (
src/component.py,src/configuration.py,component_config/configSchema.json) and buildtests/setup/configs.json— see vcr-configs-format.md - For authenticated APIs: ask user for real credentials →
secrets.json(verify it's in.gitignore) - Scaffold to record:
uv run python -m keboola.datadirtest scaffold [--secrets secrets.json] [--chain-state] - Check cassettes for unsanitized dynamic values — see vcr-sanitizers.md
- Update
.gitignore,Dockerfile(COPY tests/ tests), andpush.yml(usepython -m pytest) - Verify:
python -m pytestlocally and in Docker
See vcr-quickstart.md for all scaffold commands. See 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) |
Comments
Markdown supported