👷 Gate CI at 100% coverage
test:ci now runs c8 with --all --include "src/**/*.ts" --100, so the build job fails when any runtime file under src/ is untested. --all is what makes the gate non-vacuous: without it c8 counts only the files the suite happened to load, and a new untested module stays invisible. Add src/index.test.ts to load the public barrel, which was previously never imported at runtime and so read as 0% under --all. matcher-shared.ts is types-only (an empty runtime image) and carries a file-level c8 ignore with the reason. Why 100% and the rejected alternatives: development/ci.md § Coverage threshold.
This commit is contained in:
1 parent
76327a8c47
commit
52ce655d8e
9 files changed
+75
-7
No files matched your search
@@ -0,0 +1,27 @@
|
||||
import { strict as assert } from "node:assert";
|
||||
import { test } from "node:test";
|
||||
|
||||
import { expectTypeOf } from "expect-type";
|
||||
|
||||
import {
|
||||
getPrimitiveUnionMatcher,
|
||||
getPrimitiveUnionMatcherW,
|
||||
getTaggedUnionMatcher,
|
||||
getTaggedUnionMatcherW,
|
||||
} from "./index.ts";
|
||||
|
||||
// The published entry point is the barrel (`package.json` exports
|
||||
// `./dist/index.js`), so every factory must be reachable from here. Importing it
|
||||
// also loads the module, which is what lets c8's `--all` measure it — see
|
||||
// development/ci.md § Coverage threshold.
|
||||
test("index: the public entry point re-exports every matcher factory", () => {
|
||||
// Assert
|
||||
expectTypeOf(getPrimitiveUnionMatcher).toBeFunction();
|
||||
assert.equal(typeof getPrimitiveUnionMatcher, "function");
|
||||
expectTypeOf(getPrimitiveUnionMatcherW).toBeFunction();
|
||||
assert.equal(typeof getPrimitiveUnionMatcherW, "function");
|
||||
expectTypeOf(getTaggedUnionMatcher).toBeFunction();
|
||||
assert.equal(typeof getTaggedUnionMatcher, "function");
|
||||
expectTypeOf(getTaggedUnionMatcherW).toBeFunction();
|
||||
assert.equal(typeof getTaggedUnionMatcherW, "function");
|
||||
});
|
||||
@@ -1,3 +1,4 @@
|
||||
/* c8 ignore start -- types only: the module has no runtime image to cover */
|
||||
import type { IsLiteral, IsNever, ValueOf } from "type-fest";
|
||||
|
||||
// The primitive-union and tagged-union matchers differ in their universe, but the
|
||||
|
||||
Reference in new issue
Block a user