testing/src/expect/mock_test.ts

73 lines
1.4 KiB
TypeScript

import {
assert,
assertEquals,
} from "https://deno.land/std@0.106.0/testing/asserts.ts";
import * as mock from "./mock.ts";
Deno.test({
name: "canMockFunctions",
fn: () => {
assertEquals(typeof mock.fn(), "function");
const f = mock.fn();
f(10);
f(20);
const calls = mock.calls(f);
assert(Array.isArray(calls));
assertEquals(calls.length, 2);
assertEquals(calls.map((c: any) => c.args), [[10], [20]]);
assertEquals(calls.map((c: any) => c.returned), [undefined, undefined]);
assert(
calls.map((c: any) => typeof c.timestamp).every((t: string) =>
t === "number"
),
);
},
});
Deno.test({
name: "mockFunctionTracksReturns",
fn: () => {
const f = mock.fn(
() => 1,
() => {
throw new Error("TEST");
},
);
try {
f();
f();
} catch {}
const calls = mock.calls(f);
assert(calls[0].returns);
assert(!calls[0].throws);
assert(!calls[1].returns);
assert(calls[1].throws);
},
});
Deno.test({
name: "mockFunctionCanHaveImplementations",
fn: () => {
const f = mock.fn(
(n: number) => n,
(n: number) => n * 2,
(n: number) => n * 3,
);
f(1);
f(1);
f(1);
f(1);
f(1);
const calls = mock.calls(f);
assertEquals(calls.length, 5);
assertEquals(
calls.map((c: mock.MockCall) => c.returned),
[1, 2, 3, undefined, undefined],
);
},
});