Gå til innholdet

test-file-coverage

Verifiser at hver kildefil har en tilhørende testfil.

Utestet kode er en risiko. Denne regelen håndhever en strukturell konvensjon: for hver fil i src/ må en matchende .test.ts-fil finnes i tests/. Den bruker ctx.glob for å oppdage eksisterende testfiler, bygger et oppslagssett for rask matching, og rapporterer enhver kildefil uten en motpart.

src/
helpers/
log.ts ← has a test ✓
paths.ts ← no test file ✗
tests/
helpers/
log.test.ts
src/
helpers/
log.ts
paths.ts
tests/
helpers/
log.test.ts
paths.test.ts
/// <reference path="../rules.d.ts" />
import { relative } from "node:path";
export default {
rules: {
"test-file-exists": {
description: "Every source file should have a corresponding test file",
severity: "warning",
async check(ctx) {
for (const file of ctx.scopedFiles) {
const rel = relative(ctx.projectRoot, file);
const testPath = rel
.replace(/^src\//, "tests/")
.replace(/\.ts$/, ".test.ts");
const testFiles = await ctx.glob(testPath);
if (testFiles.length === 0) {
ctx.report.warning({
message: `No test file found at ${testPath}`,
file,
fix: `Create a test file at ${testPath}`,
});
}
}
},
},
},
} satisfies RuleSet;

For å tilpasse til prosjekter som plasserer tester ved siden av kildefilene:

const testPath = rel.replace(/\.ts$/, ".test.ts");
// src/helpers/log.ts → src/helpers/log.test.ts

Når teamet ditt følger en konvensjon om at hver kildemodul må ha en tilhørende testfil, og du ønsker å fange opp manglende tester under kodegjennomgang.

Når testdekning spores på andre måter (f.eks. dekningsgrenser i CI), eller når noen kildefiler genuint ikke trenger tester (kun-type-filer, konstanter).