Deno 測(cè)試

2020-06-24 17:06 更新

測(cè)試

Deno 有一個(gè)內(nèi)置的測(cè)試器,可以用來(lái)測(cè)試 JavaScript 或 TypeScript 代碼。

編寫(xiě)測(cè)試

要定義測(cè)試,需要使用要測(cè)試的名稱(chēng)和函數(shù)調(diào)用 Deno.test。 您可以使用兩種風(fēng)格: // 傳遞名稱(chēng)和函數(shù),緊湊的形式,但不能配置

  1. Deno.test("hello world #1", () => {
  2. const x = 1 + 2;
  3. assertEquals(x, 3);
  4. });
  5. // 全面的測(cè)試定義,更長(zhǎng)的形式,但可配置(請(qǐng)參見(jiàn)下文)
  6. Deno.test({
  7. name: "hello world #2",
  8. fn() => {
  9. const x = 1 + 2;
  10. assertEquals(x, 3);
  11. }
  12. });

Assertions

  1. https://deno.land/std/testing 上有一些有用的斷言實(shí)用程序,可以簡(jiǎn)化測(cè)試:
  2. import {
  3. assertEquals,
  4. assertArrayContains,
  5. } from "https://deno.land/std/testing/asserts.ts";
  6. Deno.test("hello world", () => {
  7. const x = 1 + 2;
  8. assertEquals(x, 3);
  9. assertArrayContains([1, 2, 3, 4, 5, 6], [3], "Expected 3 to be in the array");
  10. });

資源和異步操作清理器

Deno 中的某些操作在資源表(在此處了解更多)中創(chuàng)建資源。 這些資源應(yīng)該在使用完后關(guān)閉。 對(duì)于每個(gè)測(cè)試定義,測(cè)試器會(huì)檢查此測(cè)試中創(chuàng)建的所有資源是否已關(guān)閉,以防止資源“泄漏”。 默認(rèn)情況下,這對(duì)所有測(cè)試都是啟用的,但可以通過(guò)在測(cè)試定義中將 sanitizeResources 布爾值設(shè)置為 false 來(lái)禁用。 對(duì)于異步操作(如與文件系統(tǒng)交互)也是如此。測(cè)試器檢查您在測(cè)試中啟動(dòng)的每個(gè)操作是否在測(cè)試結(jié)束之前完成。默認(rèn)情況下,這對(duì)所有測(cè)試都是啟用的,但可以通過(guò)在測(cè)試定義中將 sanitizeps 布爾值設(shè)置為 false 來(lái)禁用。

  1. Deno.test({
  2. name: "leaky test",
  3. fn() {
  4. Deno.open("hello.txt");
  5. },
  6. sanitizeResources: false,
  7. sanitizeOps: false,
  8. });

運(yùn)行測(cè)試

要運(yùn)行測(cè)試,使用 deno test 命令,傳入包含測(cè)試函數(shù)的文件。您也可以忽略文件名,這樣當(dāng)前目錄樹(shù)內(nèi)所有符合通配符 {_,.,}test.{js,mjs,ts,jsx,tsx} 的測(cè)試都會(huì)被運(yùn)行。如果您傳入了一個(gè)目錄,那么該目錄下所有匹配的文件都會(huì)被運(yùn)行。

  1. ## 運(yùn)行當(dāng)前目錄樹(shù)內(nèi)的所有測(cè)試
  2. deno test
  3. ## 運(yùn)行 util 目錄內(nèi)的所有測(cè)試
  4. deno test util/
  5. ## 只運(yùn)行 my_test.ts
  6. deno test my_test.ts
  7. deno test deno run 使用相同的權(quán)限模型,比如在測(cè)試期間有可能要求 --allow-write 來(lái)寫(xiě)入文件系統(tǒng)。
  8. 使用 deno help test 命令來(lái)查看相關(guān)選項(xiàng)。

過(guò)濾

有許多選項(xiàng)可以過(guò)濾要運(yùn)行的測(cè)試。

命令行過(guò)濾

使用 --filter 選項(xiàng)可以單獨(dú)或成組運(yùn)行測(cè)試。 deno test --filter "hello world" tests/ 對(duì)于在 tests/ 目錄中的文件中找到的測(cè)試,此命令將運(yùn)行所有名稱(chēng)中包含字符串 "hello world" 的測(cè)試。

測(cè)試定義過(guò)濾

在測(cè)試本身中,您有兩個(gè)過(guò)濾選項(xiàng)。

忽略測(cè)試

有時(shí)您希望忽略基于某種條件的測(cè)試(例如您只希望在 Windows 上運(yùn)行測(cè)試)。 為此,您可以使用 ignore 測(cè)試定義中的布爾值。 如果它被設(shè)置為 true,則測(cè)試將被跳過(guò)。

  1. Deno.test({
  2. name: "do macOS feature",
  3. ignore: Deno.build.os !== "darwin",
  4. fn() {
  5. doMacOSFeature();
  6. },
  7. });

啟用測(cè)試

有時(shí)您可能會(huì)在大型測(cè)試中遇到問(wèn)題,只想專(zhuān)注于有問(wèn)題的測(cè)試,忽略其他測(cè)試。 為此您可以使用 only 選項(xiàng)來(lái)讓測(cè)試框架只運(yùn)行一部分測(cè)試。多個(gè)測(cè)試可以設(shè)置此選項(xiàng)。盡管測(cè)試框架將報(bào)告每個(gè)測(cè)試的成功或失敗,但當(dāng)任何一個(gè)測(cè)試標(biāo)記為 only 時(shí),總體測(cè)試將始終失敗。因?yàn)檫@只是一種臨時(shí)措施,幾乎會(huì)禁用所有測(cè)試。

  1. Deno.test({
  2. name: "Focus on this test only",
  3. only: true,
  4. fn() {
  5. testComplicatedStuff();
  6. },
  7. });

快速失敗

如果您有一個(gè)運(yùn)行時(shí)間較長(zhǎng)的測(cè)試,并希望它在第一次失敗時(shí)停止運(yùn)行,則可以在運(yùn)行測(cè)試時(shí)指定 --failfast 選項(xiàng)。 deno test --failfast

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)