@lou.codes/test
v4.2.3
Published
✅ Equality test with enforced readability
Downloads
63
Maintainers
Readme
✅ Equality test with enforced readability, based on the concept of RITEway and inspired by uvu.
Usage
📦 Node
Install @lou.codes/tests
as a dev dependency:
pnpm add -D @lou.codes/test
# or
npm install -D @lou.codes/test
# or
yarn add --dev @lou.codes/test
Add a test
script to package.json
:
{
"scripts": {
"test": "test"
}
}
To support TypeScript, install tsx as a dev dependency:
pnpm add -D tsx
# or
npm install -D tsx
# or
yarn add --dev tsx
And update package.json
:
{
"scripts": {
"test": "NODE_OPTIONS='--import tsx' test"
}
}
To add coverage, install c8
as a dev dependency:
pnpm add -D c8
# or
npm install -D c8
# or
yarn add --dev c8
And update package.json
:
{
"scripts": {
"test": "c8 test"
}
}
If you added TypeScript support, then update package.json
like this instead:
And update package.json
:
{
"scripts": {
"test": "NODE_OPTIONS='--import tsx' c8 test"
}
}
Run tests:
pnpm test
# or
npm test
# or
yarn test
🦕 Deno
Import @lou.codes/test
using the npm:
prefix, and use it directly:
import { evaluate } from "npm:@lou.codes/test";
import { add } from "../src/add.js";
evaluate({
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
}).then(console.log);
🌎 Browser
Import @lou.codes/test
using esm.sh, and use it directly:
<script type="module">
import { evaluate } from "https://esm.sh/@lou.codes/test";
import { add } from "../src/add.js";
evaluate({
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
}).then(console.log);
</script>
Writing tests
TypeScript
import type { Tests } from "@lou.codes/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,
},
] satisfies Tests<number>;
JavaScript
import { add } from "../src/add.js";
/** @satisfies {import("@lou.codes/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,
},
];
Other alternatives
Instead of exporting an Array
of Test
as default
, the export can also be a
single Test
:
import type { Test } from "@lou.codes/test";
import { add } from "../src/add.js";
export default {
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
} satisfies Test<number>;
Or multiple exports with different tests:
import type { Test } from "@lou.codes/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 (like with the Deno and Browser examples above):
import { evaluate } from "@lou.codes/test";
import { customFormatter } from "./customFormatter.js";
evaluate({
given: "a 1 and a 2",
must: "return 3",
received: () => add(2)(1),
wanted: () => 3,
}).then(customFormatter);
Default output
@lou.codes/tests
provides a default output for the tests. It looks like this:
❯ ./tests/example.test.ts
× 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:
❯ ./tests/example.test.ts
× 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".
But developers can choose to run test
directly and use their own formatter, as
it was pointed out in the previous section.
Useful links
- 📝 Documentation: TypeDoc generated documentation.
- ⏳ Changelog: List of changes between versions.
- ✅ Tests Coverage: Coveralls page with tests coverage.