どのようにVoestでノードのフェッチをモックアップする

10502 ワード

したいこと


私はモックが欲しいnode-fetch with Vitest , ユニットテストフレームワークです.Jest ノードをモックアップする方法を紹介します.

バイパスモジュール


Jestはテスト中のモジュール全体をモックアウトすることができます.これは、コードが正しくそのモジュールから関数を呼び出している場合にテストに便利です.しかし、時にはテストファイルにmockedしたモジュールの部品を使用したい場合があります.この場合、モックインされたバージョンではなく、元の実装にアクセスします.

日本製鋼所io
Vitestは大部分の冗談で互換性があります、しかし、最も活気がありませんjest.requireActual ヘルパーは上記のリンクされた記事で使用されます.
この記事はモックの方法を紹介しますnode-fetch 使わずにjest.requireActual vitestを使用して.

必須環境

  • ノード.js
  • 必要な依存関係の追加


    Vitestはまだ(少なくとも日本で)一般的ではなかったので、必要な依存関係をインストールする方法を示します.
    npm i -D vitest vi-fetch node-fetch
    

    テストする関数


    簡単なテスト機能を作りました.この関数はcount アクセスへの応答に関するJSONの値https://hogehoge.hogehoge.hogehoge getメソッドを使用します.
    import fetch from "node-fetch";
    
    export const getCountNode = async () => {
      const response = await fetch("https://hogehoge.hogehoge.hogehoge"); // GET
      const countJson = await response.json(); // Get response body as json
      return countJson.count; // Return the value of count key in the response
    };
    

    テストコードの書き込み


    前に述べたようにjest.requireActual ヘルパーなので、以下のソースコードをthe answer E . Colemanらによってスタックオーバーフローで書かれた.
    import { describe, it, expect, vi } from "vitest";
    import fetch from "node-fetch";
    import { getCountNode } from "./getCountNode";
    
    describe("sample", () => {
      it("hello", async () => {
        vi.mock("node-fetch");
        fetch.mockReturnValue(
          Promise.resolve({ json: () => Promise.resolve({ count: 33 }) })
        );
        const result = await getCountNode();
        expect(result).toBe(33);
      });
    });
    

    テスト


    この試験の結果を以下に示す.この結果は別のテストを同時に実行したので「2パス」を示します.

    テスト結果


    テストで期待値を変更しました.このテストは失敗しました.
    import { describe, it, expect, vi } from "vitest";
    import fetch from "node-fetch";
    import { getCountNode } from "./getCountNode";
    
    describe("sample", () => {
      it("hello", async () => {
        vi.mock("node-fetch");
        fetch.mockReturnValue(
          Promise.resolve({ json: () => Promise.resolve({ count: 33 }) })
        );
        const result = await getCountNode();
        expect(result).toBe(31);
      });
    });
    
    この結果は次の通りである.

    注釈


    この記事はもともと日本語で書かれています.

    vitestでノード取得のフェッチを模擬する



    禅dev