Deno 测试

2020-06-24 17:06 更新

测试

Deno 有一个内置的测试器,可以用来测试 JavaScript 或 TypeScript 代码。

编写测试

要定义测试,需要使用要测试的名称和函数调用 Deno.test。 您可以使用两种风格: // 传递名称和函数,紧凑的形式,但不能配置

Deno.test("hello world #1", () => {
  const x = 1 + 2;
  assertEquals(x, 3);
});


// 全面的测试定义,更长的形式,但可配置(请参见下文)
Deno.test({
  name: "hello world #2",
  fn() => {
    const x = 1 + 2;
    assertEquals(x, 3);
  }
});

Assertions

在 https://deno.land/std/testing 上有一些有用的断言实用程序,可以简化测试:
import {
  assertEquals,
  assertArrayContains,
} from "https://deno.land/std/testing/asserts.ts";


Deno.test("hello world", () => {
  const x = 1 + 2;
  assertEquals(x, 3);
  assertArrayContains([1, 2, 3, 4, 5, 6], [3], "Expected 3 to be in the array");
});

资源和异步操作清理器

Deno 中的某些操作在资源表(在此处了解更多)中创建资源。 这些资源应该在使用完后关闭。 对于每个测试定义,测试器会检查此测试中创建的所有资源是否已关闭,以防止资源“泄漏”。 默认情况下,这对所有测试都是启用的,但可以通过在测试定义中将 sanitizeResources 布尔值设置为 false 来禁用。 对于异步操作(如与文件系统交互)也是如此。测试器检查您在测试中启动的每个操作是否在测试结束之前完成。默认情况下,这对所有测试都是启用的,但可以通过在测试定义中将 sanitizeps 布尔值设置为 false 来禁用。

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

运行测试

要运行测试,使用 deno test 命令,传入包含测试函数的文件。您也可以忽略文件名,这样当前目录树内所有符合通配符 {_,.,}test.{js,mjs,ts,jsx,tsx} 的测试都会被运行。如果您传入了一个目录,那么该目录下所有匹配的文件都会被运行。

## 运行当前目录树内的所有测试
deno test


## 运行 util 目录内的所有测试
deno test util/


## 只运行 my_test.ts
deno test my_test.ts
deno test 和 deno run 使用相同的权限模型,比如在测试期间有可能要求 --allow-write 来写入文件系统。
使用 deno help test 命令来查看相关选项。

过滤

有许多选项可以过滤要运行的测试。

命令行过滤

使用 --filter 选项可以单独或成组运行测试。 deno test --filter "hello world" tests/ 对于在 tests/ 目录中的文件中找到的测试,此命令将运行所有名称中包含字符串 "hello world" 的测试。

测试定义过滤

在测试本身中,您有两个过滤选项。

忽略测试

有时您希望忽略基于某种条件的测试(例如您只希望在 Windows 上运行测试)。 为此,您可以使用 ignore 测试定义中的布尔值。 如果它被设置为 true,则测试将被跳过。

Deno.test({
  name: "do macOS feature",
  ignore: Deno.build.os !== "darwin",
  fn() {
    doMacOSFeature();
  },
});

启用测试

有时您可能会在大型测试中遇到问题,只想专注于有问题的测试,忽略其他测试。 为此您可以使用 only 选项来让测试框架只运行一部分测试。多个测试可以设置此选项。尽管测试框架将报告每个测试的成功或失败,但当任何一个测试标记为 only 时,总体测试将始终失败。因为这只是一种临时措施,几乎会禁用所有测试。

Deno.test({
  name: "Focus on this test only",
  only: true,
  fn() {
    testComplicatedStuff();
  },
});

快速失败

如果您有一个运行时间较长的测试,并希望它在第一次失败时停止运行,则可以在运行测试时指定 --failfast 选项。 deno test --failfast

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号