跳至主要内容

测试清理器

测试运行器提供了一些清理器,以确保测试以合理且预期的方式运行。

资源清理器

Deno 中的某些操作会在资源表中创建资源(在此处了解更多信息)。

使用完这些资源后,应将其关闭。

对于每个测试定义,测试运行器都会检查在此测试中创建的所有资源是否已关闭。 这是为了防止资源“泄漏”。 对于所有测试,此功能默认启用,但可以通过在测试定义中将 sanitizeResources 布尔值设置为 false 来禁用。

Deno.test({
name: "leaky resource test",
async fn() {
await Deno.open("hello.txt");
},
sanitizeResources: false,
});

操作清理器

对于像与文件系统交互这样的异步操作也是如此。 测试运行器会检查您在测试中启动的每个操作是否在测试结束之前完成。 对于所有测试,此功能默认启用,但可以通过在测试定义中将 sanitizeOps 布尔值设置为 false 来禁用。

Deno.test({
name: "leaky operation test",
fn() {
crypto.subtle.digest(
"SHA-256",
new TextEncoder().encode("a".repeat(100000000)),
);
},
sanitizeOps: false,
});

退出清理器

还有一个退出清理器,它确保测试的代码不会调用 Deno.exit() 来表示测试错误地成功。

对于所有测试,此功能默认启用,但可以通过在测试定义中将 sanitizeExit 布尔值设置为 false 来禁用。

Deno.test({
name: "false success",
fn() {
Deno.exit(0);
},
sanitizeExit: false,
});

// This test never runs, because the process exits during "false success" test
Deno.test({
name: "failing test",
fn() {
throw new Error("this test fails");
},
});