blob: cd56f69105fd5b806dbe4c55978f77150f8e4034 [file] [view]
# Testing & Validation Guardrails
## `--config=fast-tests` for Test Targets
* Always pass `--config=fast-tests` when running or building test targets to
avoid running expensive, flaky integration tests.
## Running Integration Tests Directly
* Integration tests under `tests/integration/` are tagged
`["integration-test", "enormous"]` and are filtered out by
`--config=fast-tests`.
* To run a specific integration test target directly, omit
`--config=fast-tests`: `bazel test //tests/integration:<target>`.
## CRITICAL: Never use `--config=fast-tests` on Non-Test Targets
* `--config=fast-tests` sets `--build_tests_only=true`, which silently ignores
non-test targets (such as `//docs:docs` or package libraries), resulting in 0
targets built!
## Lockfile Testing (`MODULE.bazel.lock`)
* Changes to transitive module extension dependencies or `.bzl` files loaded by
extensions update Bazel 9 lockfile hashes, requiring `bazel mod deps
--lockfile_mode=update` in integration test workspaces.
* When requirements files (e.g., in `//tools/publish` or root pip parses) are
modified or bumped by Dependabot, update the integration lockfile by running
`bazel mod deps --lockfile_mode=update` in `tests/integration/bzlmod_lockfile`
and verify with
`bazel test //tests/integration:bzlmod_lockfile_test_bazel_9.1.0`.
## Documentation Flake Handling
* When building `//docs:docs` fails with exit code 2, treat it as a known
Sphinx/Bazel flake and retry the build.
## Test Organization
* **Domain Placement**: Place tests by the feature tested (e.g.,
`tests/bootstrap_impls/`), not by the fixture helper used (e.g.,
`py_extension`).
* **Platform Constraints**: Restrict OS-specific targets with
`target_compatible_with` (e.g., `["@platforms//os:windows"]`) to skip on
incompatible platforms.
* **Multi-version `pytest_test`**: Restrict targets using `python_versions` to
Bzlmod with `target_compatible_with = SUPPORTS_BZLMOD`
(`//tests/support:support.bzl`). WORKSPACE mode resolves pip dependencies for
only the host Python version.