编写测试
在软件开发中,最常见的任务之一就是为现有代码编写测试。Deno 有一个内置的测试运行器,这使得测试变得非常容易。
首先,我们从标准库中导入断言语句。有很多选项,但我们这里只导入最常用的几个。
import { assert, assertEquals } from "jsr:@std/assert";
使用测试运行器最简单的方法就是传递一个描述和一个回调函数给它。
Deno.test("assert works correctly", () => {
assert(true);
assertEquals(1, 1);
});
在更复杂的场景中,我们经常需要在一些步骤之间进行一些设置和清理代码。内置的测试运行器也使这变得简单。
Deno.test("testing steps", async (t) => {
const file = await Deno.open("example.txt", {
read: true,
write: true,
create: true,
});
const encoder = new TextEncoder();
const data = encoder.encode("Hello world!");
await t.step("write some bytes", async () => {
const bytesWritten = await file.write(data);
assertEquals(bytesWritten, data.length);
await file.seek(0, Deno.SeekMode.Start);
});
await t.step("read some bytes", async () => {
const buffer = new Uint8Array(data.length);
await file.read(buffer);
assertEquals(buffer, data);
});
file.close();
});
测试运行器默认情况下使得“搬起石头砸自己的脚”变得非常困难。对于每个测试,测试运行器都会检查以确保在测试期间创建的所有资源都已被释放。有些情况下,这种行为不是很有用。我们可以使用更复杂的测试定义来禁用此行为。
Deno.test({
name: "leaky test",
async fn() {
await Deno.open("example.txt");
},
sanitizeResources: false,
});
使用 Deno CLI 在本地运行此示例
deno test -R -W https://github.com/denoland/deno-docs/blob/main/examples/scripts/writing_tests.ts