✅ Equality test with enforced legibility (based on RITEway and inspired by uvu).
import type { Tests } from "@vangware/test";
import { add } from "../src/add.js";
export default [
{
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
},
{
given: "a 1 and a -2",
must: "return -1",
received: () => add(-2)(1),
wanted: () => -1,
},
] as Tests<number>;
import { add } from "../src/add.js";
/** @type {import("@vangware/test").Tests<number>} */
export default [
{
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
},
{
given: "a 1 and a -2",
must: "return -1",
received: () => add(-2)(1),
wanted: () => -1,
},
];
Instead of exporting an Array
of Test
as default
, the export can also be a
single Test
:
import type { Test } from "@vangware/test";
import { add } from "../src/add.js";
export default {
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
} as Test<number>;
Or multiple exports with different tests:
import type { Test } from "@vangware/test";
import { add } from "../src/add.js";
export const test1: Test<number> = {
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
};
export const test2: Test<number> = {
given: "a 1 and a -2",
must: "return -1",
received: () => add(-2)(1),
wanted: () => -1,
};
It can also be used directly without the test
bin by importing the different
utils directly:
import { test } from "@vangware/test";
import { customFormatter } from "./customFormatter.js";
test({
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
}).then(customFormatter);
This should suffice:
npx test
When working with TypeScript files directly, ts-node is required, and then to run it:
NODE_OPTIONS='--loader ts-node/esm' npx test
c8 can be added and then:
# For JavaScript
npx c8 test
# For TypesScript
NODE_OPTIONS='--loader ts-node/esm' npx c8 test
If a test fails, it looks like this:
[TEST] ./tests/example.test.ts
[FAIL] Given a 1 and a 2, must return 3, but...
└ it has the wrong value. Wanted 3 but received 4.
And if the wanted/received type is more complex, like an object, then the output goes into details about the error:
[TEST] ./tests/example.test.ts
[FAIL] Given an object, must add a single property, but...
├ foo.bar has the wrong value. Wanted 1 but received 2.
├ foo.baz.1 is missing.
└ bar was set with the value "bar".
Documentation is available HERE. It is auto-generated with typedoc based on the JSDocs and the types in the source. It shouldn't be necessary to read this. Code editors like VS Code integrate the documentation in the UI.
Changelog can be found HERE.
Test coverage can be found HERE.