Skip to content

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.