Mandatory Test Packages — Every GE Project¶
STATUS: ACTIVE OWNER: Koen (Code Quality), Marije (Testing Lead) APPLIES TO: Every client project and internal project
Rule¶
Every GE project MUST include these testing packages as devDependencies. This is non-negotiable — the CI/CD pipeline requires them.
TypeScript/Node.js Projects¶
{
"devDependencies": {
"vitest": "^4.x",
"@testing-library/react": "^16.x",
"@vitest/coverage-v8": "^4.x",
"@stryker-mutator/core": "^8.x",
"@stryker-mutator/vitest-runner": "^8.x",
"@stryker-mutator/typescript-checker": "^8.x",
"fast-check": "^3.x",
"playwright": "^1.52.x",
"@playwright/test": "^1.52.x",
"eslint": "^9.x",
"typescript": "^5.x"
}
}
Stryker Configuration (stryker.config.mjs)¶
Every project must have this file at the project root:
export default {
mutate: ['lib/**/*.ts', '!lib/**/*.test.ts'],
testRunner: 'vitest',
reporters: ['clear-text', 'html'],
checkers: ['typescript'],
thresholds: { high: 80, low: 60, break: 60 },
};
fast-check Property Tests¶
Every project must have at least one property test file:
import { test, expect } from 'vitest';
import * as fc from 'fast-check';
test('example property: string roundtrip', () => {
fc.assert(
fc.property(fc.string(), (s) => {
expect(JSON.parse(JSON.stringify(s))).toBe(s);
})
);
});
Python Projects¶
# requirements-dev.txt
pytest
pytest-cov
pytest-asyncio
pytest-xdist
hypothesis
mutmut
ruff
pyright
bandit
safety
Why¶
- Stryker (NL, Dutch company) — mutation testing catches tests that pass by coincidence
- fast-check — property-based testing catches edge cases LLMs miss
- Playwright — E2E testing with multi-browser support
- Hypothesis (Python) — property-based testing for Python
These are core to the Anti-LLM Pipeline (stages 4, 6, 8). Without them, the CI pipeline's mutation and property stages skip.