2024-01-01 21:11:32 +00:00
|
|
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
2023-07-13 07:04:30 +00:00
|
|
|
import { assert, assertEquals, AssertionError, assertRejects } from "./mod.ts";
|
|
|
|
|
2024-05-07 00:08:16 +00:00
|
|
|
Deno.test("assertRejects() with return type", async () => {
|
2023-07-13 07:04:30 +00:00
|
|
|
await assertRejects(() => {
|
|
|
|
return Promise.reject(new Error());
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2024-05-07 00:08:16 +00:00
|
|
|
Deno.test("assertRejects() with synchronous function that throws", async () => {
|
2023-07-13 07:04:30 +00:00
|
|
|
await assertRejects(() =>
|
|
|
|
assertRejects(() => {
|
|
|
|
throw new Error();
|
|
|
|
})
|
|
|
|
);
|
|
|
|
await assertRejects(
|
|
|
|
() =>
|
|
|
|
assertRejects(() => {
|
|
|
|
throw { wrong: "true" };
|
|
|
|
}),
|
|
|
|
AssertionError,
|
|
|
|
"Function throws when expected to reject.",
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2024-05-07 00:08:16 +00:00
|
|
|
Deno.test("assertRejects() with PromiseLike", async () => {
|
2023-07-13 07:04:30 +00:00
|
|
|
await assertRejects(
|
|
|
|
() => ({
|
|
|
|
then() {
|
|
|
|
throw new Error("some error");
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
Error,
|
|
|
|
"some error",
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2024-05-07 00:08:16 +00:00
|
|
|
Deno.test("assertRejects() with non-error value rejected and error class", async () => {
|
2023-07-13 07:04:30 +00:00
|
|
|
await assertRejects(
|
|
|
|
() => {
|
|
|
|
return assertRejects(
|
|
|
|
() => {
|
|
|
|
return Promise.reject("Panic!");
|
|
|
|
},
|
|
|
|
Error,
|
|
|
|
"Panic!",
|
|
|
|
);
|
|
|
|
},
|
|
|
|
AssertionError,
|
|
|
|
"A non-Error object was rejected.",
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2024-05-07 00:08:16 +00:00
|
|
|
Deno.test("assertRejects() with non-error value rejected", async () => {
|
2023-07-13 07:04:30 +00:00
|
|
|
await assertRejects(() => {
|
|
|
|
return Promise.reject(null);
|
|
|
|
});
|
|
|
|
await assertRejects(() => {
|
|
|
|
return Promise.reject(undefined);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2024-05-07 00:08:16 +00:00
|
|
|
Deno.test("assertRejects() with error class", async () => {
|
2023-07-13 07:04:30 +00:00
|
|
|
await assertRejects(
|
|
|
|
() => {
|
|
|
|
return Promise.reject(new Error("foo"));
|
|
|
|
},
|
|
|
|
Error,
|
|
|
|
"foo",
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2024-05-07 00:08:16 +00:00
|
|
|
Deno.test("assertRejects() resolves with caught error", async () => {
|
2023-07-13 07:04:30 +00:00
|
|
|
const error = await assertRejects(
|
|
|
|
() => {
|
|
|
|
return Promise.reject(new Error("foo"));
|
|
|
|
},
|
|
|
|
);
|
|
|
|
assert(error instanceof Error);
|
|
|
|
assertEquals(error.message, "foo");
|
|
|
|
});
|
|
|
|
|
2024-05-07 00:08:16 +00:00
|
|
|
Deno.test("assertRejects() throws async parent error ", async () => {
|
2023-07-13 07:04:30 +00:00
|
|
|
await assertRejects(
|
|
|
|
() => {
|
|
|
|
return Promise.reject(new AssertionError("Fail!"));
|
|
|
|
},
|
|
|
|
Error,
|
|
|
|
"Fail!",
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2024-09-17 06:28:22 +00:00
|
|
|
Deno.test("assertRejects() accepts abstract class", () => {
|
|
|
|
abstract class AbstractError extends Error {}
|
|
|
|
class ConcreteError extends AbstractError {}
|
|
|
|
|
|
|
|
assertRejects(
|
|
|
|
() => Promise.reject(new ConcreteError("failed")),
|
|
|
|
AbstractError,
|
|
|
|
"fail",
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
2023-07-13 07:04:30 +00:00
|
|
|
Deno.test(
|
2024-05-07 00:08:16 +00:00
|
|
|
"assertRejects() throws with custom Error",
|
2023-07-13 07:04:30 +00:00
|
|
|
async () => {
|
|
|
|
class CustomError extends Error {}
|
|
|
|
class AnotherCustomError extends Error {}
|
|
|
|
await assertRejects(
|
|
|
|
() =>
|
|
|
|
assertRejects(
|
|
|
|
() => Promise.reject(new AnotherCustomError("failed")),
|
|
|
|
CustomError,
|
|
|
|
"fail",
|
|
|
|
),
|
|
|
|
AssertionError,
|
|
|
|
'Expected error to be instance of "CustomError", but was "AnotherCustomError".',
|
|
|
|
);
|
|
|
|
},
|
|
|
|
);
|
2024-05-07 00:08:16 +00:00
|
|
|
|
|
|
|
Deno.test("assertRejects() throws when no promise is returned", async () => {
|
|
|
|
await assertRejects(
|
|
|
|
// @ts-expect-error - testing invalid input
|
|
|
|
async () => await assertRejects(() => {}),
|
|
|
|
AssertionError,
|
|
|
|
"Function throws when expected to reject.",
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test("assertRejects() throws when the promise doesn't reject", async () => {
|
|
|
|
await assertRejects(
|
|
|
|
async () => await assertRejects(async () => await Promise.resolve(42)),
|
|
|
|
AssertionError,
|
|
|
|
"Expected function to reject.",
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
Deno.test("assertRejects() throws with custom message", async () => {
|
|
|
|
await assertRejects(
|
|
|
|
async () =>
|
|
|
|
await assertRejects(
|
|
|
|
async () => await Promise.resolve(42),
|
|
|
|
"CUSTOM MESSAGE",
|
|
|
|
),
|
|
|
|
AssertionError,
|
|
|
|
"Expected function to reject: CUSTOM MESSAGE",
|
|
|
|
);
|
|
|
|
});
|