← Back to Website builders
See how it helps
Testing and reliability
Builds tests for individual functions and complete workflows, helping catch errors and prevent previously fixed problems from returning.
testing-discipline
Team members using this skill
When is it useful?
Use this skill when you add behavior, fix a bug or need reliable evidence that a change works. It follows the project’s existing test framework and focuses on observable behavior and relevant failure cases.
What does it help you do?
- Reproduces a reported bug with a failing test before changing the implementation.
- Covers affected edge cases and keeps tests independent of real time, random values and external services.
- Runs the relevant checks and reports actual results, including failures or checks that could not run.
Try asking this
Add a regression test for a learner receiving two certificates after a retry. Reproduce the failure, fix the cause and run the relevant existing tests. Replay the same completion event after a simulated interruption. Assert one certificate identity and preserve the failing-before, passing-after evidence for the actual bug.
Detailed documentation
Read the skill’s original instructions, examples and checks in their authored language.
Show less
Testing Discipline
Find the existing setup
- Locate the test runner, its config and existing tests before writing any (package.json scripts, phpunit.xml, pytest.ini, Makefile, CI workflow).
- Use the repo's framework, file layout, naming and helpers. Do not introduce a second test framework.
- Learn the exact command CI runs and use it.
Write or update tests
- Every behavior change gets a test: new behavior is covered, changed behavior has its tests updated to the new expectation.
- Test observable behavior through public interfaces, not private internals.
- Cover the edge cases the change touches: empty, null, boundaries, error paths, permissions.
- One behavior per test, with a name that says what it proves.
- A pure refactor keeps existing tests green without editing their assertions. If an assertion must change, the behavior changed: say so.
Bugs: reproduce first
- Write a test that fails for the reported bug before fixing it. Run it and confirm it fails for the right reason.
- Fix the code, then see the same test pass.
- If the bug cannot be reproduced in a test, say so and explain how you verified the fix instead.
Keep tests deterministic
- No dependence on wall clock, timezone, locale, randomness, network, test order or shared global state. Freeze or inject time, seed randomness, stub external services.
- No arbitrary sleeps; wait for a condition or use fake timers.
- Each test creates and cleans up its own data (temp dirs, transactions, fresh databases).
- A flaky test is a bug: fix the cause, do not retry until green.
Never fake green
- Do not skip, delete, comment out, mark as expected-failure or loosen a test to make the suite pass.
- Do not weaken assertions (truthy instead of an exact value) or update snapshots blindly. Review every snapshot diff.
- Do not mock the unit under test.
- If a test fails for reasons unrelated to your task, leave it as is and report it with the error.
Run and report
- Run the tests you wrote, then the relevant wider suite; run the full suite when it is reasonably fast.
- Report the real result: the command, pass/fail counts and failures verbatim. Never claim tests pass without running them in this session.
- If tests cannot run (missing service, credentials, tooling), say exactly that and what remains unverified.
Before you finish
- Every behavior change has a new or updated test.
- Bug fixes have a test that failed before the fix and passes after it.
- Tests ran in this session with the repo's own command; results reported as observed.
- No skipped, deleted or weakened tests.
- New tests are deterministic and independent of each other.
Included files 1
SKILL.md
