| name | test-and-validate |
| description | Run tests, validate output, and verify correctness before marking work complete |
Test and Validate
When to Use
Use this skill before marking any coding task as complete. Every deliverable must be validated.
Procedure
1. Identify the Test Framework
cd ~/workspace
PROJECT_DIR=$(pwd)
if [ -f package.json ]; then
echo "=== package.json test script ==="
jq -r '.scripts.test // "none"' package.json
echo "=== test framework ==="
jq -r '.devDependencies // .dependencies | keys[]' package.json 2>/dev/null \
| grep -E 'jest|mocha|vitest|tap|ava' || echo "Using node:test (built-in)"
fi
if [ -f pyproject.toml ] || [ -f setup.py ] || [ -f requirements.txt ]; then
echo "=== Python test framework ==="
pip list 2>/dev/null | grep -iE 'pytest|unittest2|nose' || echo "Using unittest (built-in)"
fi
find . -type d -name 'test*' -maxdepth 3 2>/dev/null
find . -type f -name '*test*' -o -name '*spec*' | head -20
2. Run the Test Suite
Node.js:
npm test 2>&1 | tee /tmp/test-output.txt
TEST_EXIT=$?
echo "Exit code: $TEST_EXIT"
Python:
python3 -m pytest tests/ -v 2>&1 | tee /tmp/test-output.txt
TEST_EXIT=$?
echo "Exit code: $TEST_EXIT"
Shell scripts:
bash -n script.sh
echo "Syntax check exit code: $?"
bash script.sh --help
echo "Help exit code: $?"
echo '{"test": true}' | bash script.sh
echo "Sample run exit code: $?"
3. Fix Failures
If tests fail:
- Read the failure output carefully — identify the specific assertion or error
- Fix the code (not the test, unless the test is wrong)
- Re-run the failing test in isolation first:
npx jest --testPathPattern="failing-test" 2>&1
node --test tests/failing-test.js 2>&1
python3 -m pytest tests/test_module.py::test_function -v 2>&1
- Then re-run the full suite to confirm no regressions
4. Manual Validation for Scripts and CLIs
SCRIPT="path/to/script.sh"
bash "$SCRIPT" --help
echo "--- Exit code: $? (expect 0) ---"
bash "$SCRIPT" valid-arg
echo "--- Exit code: $? (expect 0) ---"
bash "$SCRIPT" --nonexistent 2>&1
echo "--- Exit code: $? (expect non-zero) ---"
echo "" | bash "$SCRIPT"
echo "--- Exit code: $? (expect non-zero or graceful handling) ---"
5. Verify No Syntax Errors Across Changed Files
CHANGED_FILES=$(find . -name '*.js' -o -name '*.py' -o -name '*.sh' -o -name '*.ts' \
| xargs ls -t 2>/dev/null | head -20)
for f in $CHANGED_FILES; do
case "$f" in
*.js) node --check "$f" && echo "OK: $f" || echo "FAIL: $f" ;;
*.py) python3 -m py_compile "$f" && echo "OK: $f" || echo "FAIL: $f" ;;
*.sh) bash -n "$f" && echo "OK: $f" || echo "FAIL: $f" ;;
*.ts) npx tsc --noEmit "$f" 2>&1 && echo "OK: $f" || echo "FAIL: $f" ;;
esac
done
6. Record Test Results in Task Completion
When updating your task status, include test results:
bash /home/shared/scripts/task.sh update "$TASK_ID" \
--status completed \
--result "All tests passing. 12/12 tests passed. Manual validation of CLI flags confirmed."
Validation Checklist