ホームページ > ウェブフロントエンド > jsチュートリアル > Node.js テスト ランナーの使用方法: 詳細ガイド

Node.js テスト ランナーの使用方法: 詳細ガイド

Patricia Arquette
リリース: 2025-01-17 18:31:11
オリジナル
594 人が閲覧しました

JavaScript テスト ランナーまたは Node.js テスト ランナーは、単体テスト、統合テスト、エンドツーエンド テストなどのさまざまなテスト手法を有効にすることで、Web サイトや Web アプリケーションのテスト プロセスを自動化するのに役立ちます。

Node.js テスト ランナーは、テストの実行を自動化し、結果に関するフィードバックを提供することで、ソフトウェア開発の段階で効果的にバグを特定して解決するのに役立ちます。

このブログでは、テスト フックと並行してモックや並列テストなどの方法を検討しながら、自動テストに Node.js テスト ランナーを活用する方法について説明します。

Node.js テスト ランナーとは何ですか?

Python、Ruby、Go などのプログラミング言語には組み込みのテスト ランナーがありましたが、JavaScript にはテスト ランナーがありませんでした。 Mocha、Jest、Jasmine など、JavaScript エコシステムのすべてのテスト ランナーは、サードパーティ パッケージとして構築されました。

Node.js が Node.js バージョン 18 で実験的な組み込みテスト ランナーをリリースし、Node.js バージョン 20 でテスト ランナーが安定したときに、このすべてが変わりました。

テスト ランナーは、次のようないくつかの機能を提供します。

  • アサーション ライブラリ

  • テストフック

  • モック機能

  • コードカバレッジ

  • テストレポーター

  • 非同期テスト

Node.js テスト ランナーを使用する理由

Node.js のネイティブ テスト ランナーは、JavaScript 自動テストにいくつかの利点をもたらします。このテスト ランナーを利用するメリットの一部を以下に概説します。

  • テスト ランナーは Node.js 自体に統合されているため、使用するツールを決定する時間を節約し、開発者とテスターのテスト プロセスを合理化します。

  • Node.js テスト ランナーの組み込みアサーション ライブラリにより、他のアサーション ライブラリをインストールすることなく、テストの作成とテスト結果の取得のプロセスが簡素化されます。

  • テスト ランナーにはコード カバレッジの機能が含まれており、まだテストされていない部分を正確に特定することでコードのすべてのセクションが確実にテストされます。

  • ネイティブ テスト ランナーには、テスト ファイルとその依存関係の変更を監視できる監視モードと呼ばれる機能があります。変更が検出された場合、テスト ランナーは変更の影響を受けるテストを自動的に再実行します。

  • Node.js を使用したテストでは、ソフトウェア全体から分離して個々のコンポーネントをテストするために重要なモック、スタブ、スパイの使用が可能になります。

Node.js テスト ランナーを始めるにはどうすればよいですか?

ブログ投稿のこの部分では、Node.js 組み込みテスト ランナーの使用を開始し、テスト スクリプトを正常に実行する方法を学びます。

開始するには、次の手順に従ってください。

  1. バージョン 20 のリリース以降、テスト ランナーは Node.js のコアに完全に統合されているため、必ず Node.js バージョン 20 以降を使用してください。

  2. TestRunner ディレクトリを作成し、統合開発環境 (IDE) を使用して起動します。たとえば、このシナリオでは VS Code を使用しました。

ターミナルで次のコマンドを実行して、Node.js プロジェクトをセットアップします。

    npm init -y
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

TestRunner ディレクトリに src と testing という名前の 2 つの新しいフォルダーを作成します。

次のコード スニペットを使用して、package.json ファイル内のテスト スクリプトを更新します。

    "scripts": {
        "test": "node --test TestRunner/tests/"
      },
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

以下のコマンドを実行して Selenium WebDriver をインストールします:

    npm install selenium-webdriver
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー


`

以下のコマンドを実行して ChromeDriver をインストールします:


npm install chromedriver

tests フォルダーに新しい starting.test.js ファイルを作成します。次に、次のコードをファイルに追加します。

`
const { ビルダー、バイ、キー、まで } = require("selenium-webdriver");
constassert = require("assert").strict;
const { テスト } = require("node:test");

{
  let driver;


  test("Setup WebDriver for Google Search Test Suite", async (t) => {
    driver = await new Builder().forBrowser("chrome").build();
  });


  test("Navigate to Google and verify title", async (t) => {
    await driver.get("http://www.google.com");
    const title = await driver.getTitle();
    assert.strictEqual(title, "Google");
  });


  test("Cleanup after Google Search Test Suite", async (t) => {
    await driver.quit();
  });
}
ログイン後にコピー
ログイン後にコピー

`

Node.js テスト ランナーの使用方法: 詳細ガイド

上記のコードは、node:testnode:assert から必要な関数をインポートし、Google に移動してタイトルを検証する簡単なテストを記述します。

以下のコマンドを実行してテストを実行します。


ノードテスト/started.test.js

description() ブロックと it() ブロックの使用

Node.js テスト ランナーでは、describe() ブロックと it() ブロックを使用してテストを実行できます。 describe() ブロックは、関連するテストをまとめてグループ化するスイートを宣言するために使用され、it() ブロックはテストを宣言するために使用されます。

describe()/it() ブロックを使用する利点は、テストを関連する機能のブロックに編成する方法が提供されることです。これは、テストをきちんと整理して論理的にグループ化したい、大規模なテスト スイートに役立ちます。

describe() ブロック内に、特定のテスト ケースを定義する複数の test() または it() ブロックを含めることができます。 describe() ブロックを相互にネストして、より詳細に構成するテストのサブグループを作成することもできます。

次に示すように、describe() ブロックと it() ブロックを使用してテストを作成できます。

tests ディレクトリ内に descriptionit.test.js ファイルを作成し、以下の提供されたコード スニペットを挿入します。

`
description("フォーム入力テスト", async () => {
ドライバーに任せてください;

  await it("Setup WebDriver", async () => {
    driver = await new Builder().forBrowser("chrome").build();
  });


  await it("should input values in a form and check their sum", async () => {
    await driver.get("https://www.lambdatest.com/selenium-playground/simple-form-demo");


    await driver.findElement(By.id("sum1")).sendKeys(2);
    await driver.findElement(By.id("sum2")).sendKeys(3);
    await driver.findElement(By.xpath("//button[normalize-space()='Get Sum']")).click();


    let sum = await driver.wait(until.elementLocated(By.id("addmessage")),10000);
    let sumNo = await sum.getText();
    assert.strictEqual(sumNo, "5");
  });


  await it("Cleanup: Close the browser", async () => {
    await driver.quit();
  });
});
ログイン後にコピー

`

以下のコマンドを実行してテストを実行します。


ノードテスト/describeit.test.js

テストのスキップ

Node.js テスト ランナーを使用すると、テストをスキップすることもできます。不安定なテスト、テスト対象の機能が開発中である場合、テストが利用できない外部依存関係に依存している場合、またはテストが非推奨の機能に基づいている場合は、テストをスキップできます。

個々のテストは、スキップ オプションをテストに渡すか、テスト コンテキストの skip() アノテーションを呼び出すことでスキップできます。組み込みテスト ランナーでのテストの実行を回避するための注釈は、skip:trueskip;'このテストはスキップされます't.skip( )、および t.skip(“このテストはスキップされます”) (次のように)例。

  1. tests ディレクトリ内に Skipping.test.js ファイルを作成し、以下に提供されたコード スニペットを挿入します。

`
description("厳密に等しいことが期待される値", async () => {
ドライバーに任せてください;
driver = await new Builder().forBrowser("chrome").build();
it("厳密に等しいはずです", async () => {
await driver.get("http://www.google.com");
const title = await driver.getTitle();
assert.strictEqual(title, "Google");
});

    npm init -y
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

`

  1. 以下のコマンドを実行してテストを実行します。


ノードテスト/skipping.test.js

テストフックの使用

Node.js テスト ランナーは、さまざまなテスト フックを提供します。フックは、テストの直前または直後に実行される関数です。 Node.js テスト ランナーで使用できるフックは、before()beforeEach()after()、および afterEach() です。 >.

これらのフックの使用方法の例をいくつか示します:

**before() *フック*

before() フックは、describe ブロック内のすべてのテストの前に 1 回実行されるテスト環境を準備するために使用されます。たとえば、before() フックを使用して、すべてのテストが実行される前に WebDriver をセットアップできます。

以下は before() フックの使用方法です。

  1. tests ディレクトリ内に beforehook.test.js ファイルを作成し、以下の提供されたコード スニペットを挿入します。

`
description("シンプルなフォームのデモ タイトル テスト", async () => {
ドライバーに任せてください;

    "scripts": {
        "test": "node --test TestRunner/tests/"
      },
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

`

  1. 以下のコマンドを実行してテストを実行します。


ノードテスト/beforehook.test.js

**beforeEach() *フック*

beforeEach() フックは、各テストの前に 1 回実行され、テストが相互に影響を及ぼさないように分離するために使用されます。たとえば、いくつかのテストのために特定のページ URL にアクセスする必要がある場合、beforeEach() フックを使用して、各テストが実行される前に URL ページを開くことができます。

以下は beforeEach() フックの使用方法です。

  1. tests ディレクトリ内に beforeEachhook.test.js ファイルを作成し、以下の提供されたコード スニペットを挿入します。

`
description("シンプルなフォームのデモ テスト", async () => {
ドライバーに任せてください;

    npm install selenium-webdriver
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

`

  1. 以下のコマンドを実行してテストを実行します。


ノードテスト/beforeEachhook.test.js

**after() *フック*

after() フックは、すべてのテストの実行後に 1 回実行され、すべてのテストの実行後にクリーンアップ アクションを実行するために使用されます。たとえば、テストの実行後に WebDriver を閉じたい場合は、after() フックを使用できます。

以下は after() フックの使用方法です。

  1. tests ディレクトリ内に afterhook.test.js ファイルを作成し、以下の提供されたコード スニペットを挿入します。

`
description("シンプルなフォームのデモ テスト", async () => {
ドライバーに任せてください;

    npm init -y
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

`

  1. 以下のコマンドを実行してテストを実行します。


ノードテスト/afterhook.test.js

**afterEach() *フック*

afterEach() フックは、各テストの後に 1 回実行されます。これは、各テストの後にクリーンアップ操作を実行するために使用されます。たとえば、各テストの後に Cookie をクリアしたい場合は、afterEach() フックを使用できます。

tests ディレクトリ内に afterEachhook.test.js ファイルを作成し、以下の提供されたコード スニペットを挿入します。

`
const { ビルダー、バイ、キー、まで } = require("selenium-webdriver");
constassert = require("assert").strict;
const {
説明してください、
それ、
前に、
前それぞれ、
その後、
各後、
} = require("node:test");

    "scripts": {
        "test": "node --test TestRunner/tests/"
      },
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

`

以下のコマンドを実行してテストを実行します。


ノードテスト/afterEachhook.test.js

モックの実装

Node.js テスト ランナーの組み込みモック機能を使用すると、外部依存関係またはサードパーティ パッケージが使用されているテスト状況で、関数をモックして置き換えることができます。これらの依存関係がまだ開発段階にある場合に特に便利です。

モック機能を使用してスパイとスタブを作成できます。以下は、モック機能を使用して API からのデータの取得を検証する例を示しています。

まず、以下のコマンドを使用して、ブラウザ用の Promise ベースの HTTP クライアントである axios と Node.js をインストールします。


npm install axios

次に、index.js ファイルを作成し、次のコードを追加します。

`
const axios = require("axios");

    npm install selenium-webdriver
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

`

上記のコードは、MakeRequest クラスを実装しています。このクラスには、fetchDataFromAPI()slugifyTitle()、および addToDB().

次に、mock.test.js ファイルを作成し、次のコードを追加します。

`

// モックに関連するテストについて説明します
description("モッキングテスト", async () => {
// 各テストの前にモックをリセットします
beforeEach(() =>mock.restoreAll());

{
  let driver;


  test("Setup WebDriver for Google Search Test Suite", async (t) => {
    driver = await new Builder().forBrowser("chrome").build();
  });


  test("Navigate to Google and verify title", async (t) => {
    await driver.get("http://www.google.com");
    const title = await driver.getTitle();
    assert.strictEqual(title, "Google");
  });


  test("Cleanup after Google Search Test Suite", async (t) => {
    await driver.quit();
  });
}
ログイン後にコピー
ログイン後にコピー
`

上記のコードでは、

fetchDataFromAPI メソッドが MakeRequest クラスからモックされています。

関数がネットワーク リクエストを行うのを防ぐために、mockImplementation() メソッドを使用して、特定の値をテストできる事前定義された出力が返されます。

最後に、mock.method() を使用してスパイを作成し、slugifyTitle() 関数が呼び出されるかどうかをテストします。また、関数が呼び出された回数とその出力はタイトルに基づいてテストされます。

以下のコマンドを使用してテストを実行します:


ノードテスト/mock.test.js

並列テストの実行

Node.js テスト ランナーを使用すると、複数のテストを順番に実行するのではなく、並行して同時に実行できます。

Node.js テスト ランナーでテストを並列実行するには、concurrency: true パラメーターを describe() 関数の 2 番目の引数として渡す必要があります。

以下は、同時実行パラメーターを使用して Node.js ネイティブ テスト ランナーと Selenium を使用してテストを並列実行する方法の例です。

tests フォルダーにParallel.test.js ファイルを作成し、次のコードを追加します。

`
description("E コマース サイトのテスト", { concurrency: true }, async () => {
ドライバーに任せてください;

    npm init -y
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

`

以下のコマンドを実行してテストを実行します。


ノードテスト/Parallel.test.js

上記のテストの実行はローカル グリッドで実行されます。ただし、Node.js を使用して自動テストを拡張するには、クラウドベースのテスト アプローチの使用を検討できます。

LambdaTest のような AI 主導のテスト実行プラットフォームを使用すると、スケーラブルな自動化クラウド インフラストラクチャ上で Node.js テストを実行でき、互換性と信頼性を確保できます。

結論

要約すると、Node.js テスト ランナーは、Web プロジェクトで自動テストを作成および実行するための軽量ソリューションを提供します。一般的なテスト フレームワークにあるすべての機能が含まれているわけではありませんが、その単純さとユーザー フレンドリーな性質により、自動テストを開始するための優れたオプションとなっています。

このブログでは、Node.js 組み込みテスト ランナーの機能について説明します。 describe() 関数とその構文を使用してテストを作成する方法と、セットアップおよび破棄操作のフックを使用する方法、および JavaScript コードの品質保証と安定性のために並列スレッドでテストを同時にモックして実行する方法について説明します。強化の目的。

複雑なテスト状況では、Mocha、Jasmine、Jest などの一般的なフレームワークに対してデフォルトのテスト ランナーを評価して、どれが要件に最も適しているかを判断することができます。

以上がNode.js テスト ランナーの使用方法: 詳細ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート