testEach
To make testing a lot of combinations easy.
Define the inputs and required outputs, write the test logic once, and let testEach
run each case for you separately.
You can add descriptions to each TestCase
, so you can use them in assertions, async
test functions are also supported.
Usage
import { TestCase, testEach } from "https://deno.land/x/test_each@v0.0.2/mod.ts";
testEach<{a: number, b: number}, number>(
"Quick math",
[
{ input: { a: 1, b: 3 }, result: 3, desc: '1*3 should equal 3'},
{ input: { a: 2, b: 3 }, result: 6, desc: '2*3 should equal 6' },
{ input: { a: 3, b: 3 }, result: 9, desc: '3*3 should equal 9' },
{ input: { a: 4, b: 3 }, result: 12, desc: '4*3 should equal 12' },
],
(testCase) => {
assertEquals(
testCase.input.a * testCase.input.b,
testCase.result,
testCase.desc,
);
},
);
testEach<number | boolean, unknown>(
"Exceptions",
[
{ input: false, exception: { msg: "my exception" } },
{ input: 5, result: 12 },
],
(testCase) => {
if (typeof testCase.input === "number") {
assertEquals(60 / testCase.input, testCase.result);
} else {
throw new Error("my exception");
}
},
);
testEach<unknown, unknown>(
"Options",
[/*...*/],
(testCase) => {/* ... */ },
{only: true, ignore: true, sanitizeOps: true, sanitizeResources: true}
);