[[Deno]]で[[Parameterized Test]]を書く方法。公式からは提供されていないので自分で実装する必要がある。
```ts
export function parameterizedTest<T>(
name: string,
cases: T[],
testFn: (input: T) => void,
toTitle?: (name: string, input: T) => string,
) {
for (const testCase of cases) {
Deno.test(
toTitle?.(name, testCase) ?? `${name} -> ${JSON.stringify(testCase)}`,
() => {
testFn(testCase);
},
);
}
}
```
使用例。
```ts
import { assertEquals } from "@std/assert";
export function sum2(x: number, y: number): number {
return x + y;
}
parameterizedTest<
[
Parameters<typeof sum2>[0],
Parameters<typeof sum2>[1],
ReturnType<typeof sum2>,
]
>(
"sum2",
// deno-fmt-ignore
// prettier-ignore
// x | y | expected
[
[ 1 , 10 , 11 ],
[ 1 , 100 , 101 ],
[ 1 , 1000 , 1001 ],
] as const,
([x, y, expected]) => {
assertEquals(sum2(x, y), expected);
},
(name, [x, y, expected]) => `[${name}] ${x} + ${y} = ${expected} ?`,
);
```
```console
❯ deno test
running 3 tests from ./main_test.ts
[sum2] 1 + 10 = 11 ? ... ok (0ms)
[sum2] 1 + 100 = 101 ? ... ok (0ms)
[sum2] 1 + 1000 = 1001 ? ... ok (0ms)
ok | 3 passed | 0 failed (2ms)
```