Jest の使用の概要

2023.08.07

序章

最近、Jest を使用して単体テストをいくつか書いています。 これは、機能をテストし、エラーを特定するのに非常に便利なツールです。 基本的に、jest は Facebook による JavaScript フレームワークであり、単体テストによく使用されます。

前提条件

  • Node.js
  • Jest をインストール
    • 以下のコマンドに示すように、npm または Yarn を使用してプロジェクトに jest をインストールできます。
    • npm install -D jest
    • ここでは、-D で jest を開発依存関係としてインストールします。

関数を書く

正の数の配列の平均数を計算する簡単な関数を書いてみましょう。この関数は、calculate_average に渡されたパラメータが有効な Array でない場合にエラーをスローします。また、正以外の数値に遭遇した場合にもエラーがスローされます。

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

// Function to calculate average of the array of integers
const calculate_average = (arr) => {
  // Check if array is empty or null
  if (!Array.isArray(arr) || arr.length === 0) {
    throw new Error("Array is empty");
  }

  //Initialize total
  let total = 0;

  //Iterate through the numbers in the array
  for (const number of arr) {
    //check if number is negative
    if (!Number.isInteger(number) || number < 0) {
      throw new Error("The number is not a positive integer");
    } else {
      total += number;
    }
  }

  //calculate and return average
  return Number.parseFloat((total / arr.length).toFixed(2));
};

module.exports = calculate_average;

関数の単体テストを作成する

実装された関数のテスト ケースをいくつか書いてみましょう

Jest で使用されるキーワードの意味は次のとおりです。

  • describe は、テスト ケースをテストの論理グループに編成するために使用されます。
  • test は、新しいテスト ケース定義を開始するために使用されます。

テストは以下のケースに基づいています。

  • 返された平均値が正しいかどうかをチェックします
  • Calculate_average で無効なパラメータが渡されたときにエラーがスローされるかどうかを確認します
  • 正でない数値が見つかったときにエラーがスローされるかどうかを確認します

ファイルtest/index.test.jsに、次のテストケースを追加します。

const calculateAverage = require("../index");

//Test if the correct average is returned
describe("Calculate average test", () => {
  let arr1 = [1, 2, 3, 4, 5];
  let arr2 = [3, 3, 4];

  test("[1,2,3,4,5] should return 3", () => {
    expect(calculateAverage(arr1)).toBe(3);
  });

  test("[3,3,4] should return 3.33", () => {
    expect(calculateAverage(arr2)).toBe(3.33);
  });
});

describe("Test if array is empty", () => {
  test("[] should throw an exception", () => {
    expect(() => {
      calculateAverage([]);
    }).toThrow("Array is empty");
  });
  test("null should throw an exception", () => {
    expect(() => {
      calculateAverage(null);
    }).toThrow("Array is empty");
  });
});

//Test if the number is negative
describe("Test if number is not a positive number", () => {
  let arr1 = [1, 2, -3];
  let arr2 = [1, "2", 3];
  test("[1,2,-3] should throw an exception", () => {
    expect(() => {
      calculateAverage(arr1);
    }).toThrow("The number is not a positive integer");
  });

  test('[1,"2",3] should throw an exception', () => {
    expect(() => {
      calculateAverage(arr2);
    }).toThrow("The number is not a positive integer");
  });
});

package.json ファイルのscriptsに次の行を追加します。

"scripts": {
"test": "jest"
},

次のコマンドを実行します

npm test

期待される結果

結論

正でない数値の平均値を計算する関数の単体テストを正常に作成できました。実装した関数が正しく動作するかどうかを jest を使って確認するのは非常に興味深かったです。とても速くて安全です。Jest は十分に文書化されており、ほとんど設定を必要とせず、要件に合わせて拡張できます。