Jasmine Framework チュートリアル: 例を使用した単体テスト

⚡ スマートサマリー

ジャスミンは行動主導型です JavaブラウザやDOMを使用せずにNode.jsのユニットテストを実行するスクリプトテストフレームワーク。describeブロック、it specs、expectマッチャーを使用して、エクスポートされたすべての関数がドキュメントどおりに動作することを検証します。

  • 🔘 フレームワークの役割: ジャスミンはどんなテストでも Javaブラウザ、DOM、ヘルパーライブラリを使用しないスクリプト。
  • ☑️ 環境設定: モジュールをインストールし、jasmine initを実行してから、spec/support/jasmine.jsonを確認してください。
  • 仕様パターン: describe はスイートの名前を述べ、仕様を定義し、expect は結果を検証します。
  • 🧪 マッチングツール: toBe、toEqual、toContain、toThrow、toHaveBeenCalled は、ほとんどのアサーションをカバーします。
  • 🛠️ 現代のランナー: メンテナンスされているjasmineパッケージは、メンテナンスされていないjasmine-nodeモジュールに取って代わります。
  • 📊 フレームワークの選択: Jasmineはアサーションとスパイを出荷し、Jestは並列実行とスナップショットを追加します。

Node.jsアプリケーションの単体テストのためのJasmineフレームワークチュートリアル

JasmineJS とは何ですか?

Jasmineはオープンソースで最も人気のある Javaあらゆる種類のテストのためのスクリプトライブラリテストフレームワーク Javaスクリプトアプリケーション。Jasmineは、ビヘイビア駆動開発(BDD)の手順に従い、 Javaスクリプト ステートメントは適切に単体テストされています。

Jasmine フレームワークは何に使用されますか?

テストはあらゆるアプリケーションにとって重要な要素です。Node.jsのユニットテストには、Jasmineと呼ばれるフレームワークが利用できます。2000年代初頭には、テスト用のフレームワークが存在していました。 Javaスクリプト JsUnit というアプリケーション。 Later このフレームワークはアップグレードされ、現在は Jasmine として知られています。

ジャスミンは自動化に役立ちます 単体テストこれは、開発において非常に重要な慣行となっています。ping そして、最新のウェブアプリケーションを導入する。

この Jasmine チュートリアルでは、Jasmine を使用して環境をセットアップする方法と、最初の Node.js アプリケーションに対して Jasmine テストを実行する方法を学習します。

Node.js アプリケーションをテストするための Jasmine

ジャスミンは 行動駆動開発(BDD) テストフレームワーク Javaスクリプト。 ブラウザ、DOM、その他の Javaスクリプトフレームワーク。そのため、Webサイトに適しています。 Node.js プロジェクト、または Javaスクリプトを実行できます。Jasmine の使用を開始するには、まず必要な Jasmine モジュールをダウンロードしてインストールする必要があります。

Jasmine テスト環境をセットアップする方法

このJasmine Node.jsチュートリアルでは、次に環境を初期化し、Jasmineの設定ファイルを確認する必要があります。以下の手順は、環境にJasmineをセットアップする方法を示しています。

ステップ1) NPM モジュールのインストール
次のことを行う必要があり NPM をインストールする Nodeアプリケーション内からJasmineフレームワークを使用するためのjasmineモジュール。jasmine-nodeモジュールをインストールするには、以下のコマンドを実行してください。

npm install jasmine-node

バージョンノート(2026): 上記の歴史的なコマンドはまだ機能しますが、 ジャスミンノード このモジュールはメンテナンスモードであり、Jasmine 1.3 をバンドルしているため、レガシープロジェクトでのみ使用してください。新しい Node.js 作業では、メンテナンスされているバージョンがインストールされます。 ジャスミンCLI 開発依存関係として設定し、npx を介して呼び出します。

npm install --save-dev jasmine
npx jasmine init

ジャスミン 6.x は現在のメジャーラインであり、Node.js 20、22、24をサポートしており、Node.js 24は2026年にアクティブLTSリリースとなる予定です。

ステップ2) Jasmine 環境を初期化する
プロジェクトの初期化 – これにより、Jasmine は spec ディレクトリと設定 json を作成します。spec ディレクトリは、すべてのテスト ファイルを保存するために使用されます。これにより、Jasmine はすべてのテストの場所を認識し、それに応じてテストを実行できます。 JSONの このファイルは、Jasmineに関する特定の構成情報を保存するために使用されます。

Jasmine環境を初期化するには、以下のコマンドを実行してください。

jasmine init

ステップ3) 設定ファイルを調べてください。
構成ファイルは、spec/support フォルダーに jasmine.json として保存されます。 このファイルには、Jasmine ランナーに含めるソース ファイルと仕様ファイルが列挙されています。

以下のスクリーンショットは、Jasmineのjasmine.jsonファイルの典型的な例を示しています。

スペックサポートフォルダ内のJasmine設定ファイルには、specディレクトリとspec_filesが表示されています。

  1. ここで spec ディレクトリが指定されていることに注意してください。 前述したように、jasmine が実行されると、このディレクトリ内のすべてのテストが検索されます。
  2. 次に注意すべきことは、spec_files パラメータです。これは、作成されるテスト ファイルに「spec」キーワードを追加する必要があることを示します。

設定に関する注意事項: Jasmine 6.x では同じファイルも受け入れます ヘルパーは、各仕様の前に一度ロードされ、 env random や stopSpecOnExpectationFailure などのオプションを保持するブロック。デフォルトの spec_files glob は **/*[sS]pec.?(m)jsまた、別のファイルを渡すこともできます。 –config または JASMINE_CONFIG_PATH 変数に保存します.

次に、この Jasmine フレームワーク チュートリアルでは、Jasmine を使用して Node.js アプリケーションをテストする方法を学びます。

Jasmine を使用して Node.js アプリケーションをテストする方法

Node.js アプリケーションに対して Jasmine 単体テストを使用するには、一連の手順に従う必要があります。

以下の例では、テスト対象となる2つの数値を加算するモジュールを定義します。次に、テストコードを含む別のコードファイルを定義し、Jasmineを使用して加算関数をテストします。

ステップ1) テストする必要があるコードを定義します。2 つの数値を加算して結果を返す関数を定義します。このコードは、「Add.js」というファイルに記述されます。

以下のスクリーンショットは、完成したAdd.jsモジュールを示しており、その下に同じコードがテキストとして繰り返されています。

Add.jsモジュールは、2つのパラメータの合計を返すAddNumber関数をエクスポートします。

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};

Code 説明

  1. 「exports」キーワードは、このファイルで定義された機能が他のファイルから実際にアクセスできることを保証するために使用されます。
  2. 次に、「AddNumber」という関数を定義します。 この関数は、a と b の 2 つのパラメーターを取るように定義されています。 この関数はモジュール「exports」に追加され、他のアプリケーションモジュールからアクセスできるパブリック関数として作成されます。
  3. 最後に、関数がパラメータの追加値を返すようにします。

ステップ2) 次に、Add.js ファイル内の「Add」関数をテストするために使用する Jasmine テスト コードを定義する必要があります。以下のコードを、というファイルに記述する必要があります。 spec.js を追加します。

お願いJasmineがテストファイルを検出できるように、「spec」という単語をテストファイルに追加する必要があります。

以下のスクリーンショットは、同じ仕様ファイルをエディタで開いた状態を示しています。

add-spec.js ファイルには、describe スイートと、AddNumber が 11 を返すことをアサートする it 仕様が含まれています。

var app=require("../Add.js");
describe("Addition",function(){
it("The function should add 2 numbers",function() {
var value=app.AddNumber(5,6);
expect(value).toBe(11);
});
});

Code 説明

  1. このファイルで「AddNumber」関数をテストできるように、最初に Add.js ファイルをインクルードする必要があります。
  2. 現在、テストモジュールを作成しています。 テスト モジュールの最初の部分では、基本的にテストに名前を付けるメソッドを記述します。 この場合、テストの名前は「加算」です。
  3. 次のビットは、「it」メソッドを使用したテストの説明です。
  4. ここで、AddNumber メソッドを呼び出し、パラメータ 5 と 6 の 2 つを渡します。これは Add.js ファイル内の AddNumber メソッドに渡されます。戻り値は value という変数に格納されます。
  5. 最後のステップは、比較、つまり実際のテストを行うことです。AddNumber 関数によって返される値は 11 であると予想されるため、expect(value).toBe(期待値) メソッドを使用してこれを定義します。

出力

  1. テストを実行するには、jasmine コマンドを実行する必要があります。
  2. 以下のスクリーンショットは、jasmineコマンドを実行すると、add-spec.jsというテストファイルが存在することを検出し、そのテストを実行することを示しています。テストにエラーがある場合は、それに応じて表示されます。

実行された add-spec テストを報告する jasmine コマンドのコンソール出力

Addの例では単一のマッチャーを使用していますが、Jasmineには完全なマッチャーセットが付属しています。以下の表は、あなたが作成するほぼすべてのアサーションを網羅するマッチャーの一覧です。

最もよく使うジャスミンのマッチングツール

マッチャーは、expect() の後に続く比較です。マッチャーの前に .not を連結すると、それを反転できます。例: expect(value).not.toBe(11).

マッチャー チェック対象 典型的な使用
になる 厳密な同一性、=== と同じ比較 expect(value).toBe(11)
等しい オブジェクトと配列の深い等価性 expect(user).toEqual({id: 1})
含む 配列または文字列内の要素 expect(files).toContain('add-spec.js')
定義未定 値は未定義ではありません expect(app.AddNumber).toBeDefined()
投げる ラップされた関数がエラーを発生させる expect(callAdd).toThrow()
呼ばれたことがある スパイが少なくとも一度は呼び出された expect(logger.write).toHaveBeenCalled()

エラーメッセージを読みやすくするための2つの習慣:toBeはプリミティブ型と同一の参照にのみ使用すること。なぜなら、内容が同じ2つのオブジェクトは決して===にならないからである。toEqualは構造体に使用し、引数が呼び出し自体と同じくらい重要な場合はtoHaveBeenCalledWithを追加すること。

ジャスミンにおけるセットアップ、撤収、そしてスパイ

実際のスイートでは、共有状態と、処理速度の遅いコラボレーターのためのダブルが必要です。Jasmineは、追加パッケージなしでこれら両方を提供します。

  • beforeEach と afterEach describe ブロック内のすべての仕様の前後に実行します。describe ブロックは、フィクスチャを再構築するのに最適な場所です。
  • すべて前とすべて後 ブロック全体に対して一度だけ実行されるため、接続を開くなどのコストのかかる作業のために確保しておきましょう。
  • spyOn(object, 'method') 実際のメソッドを tracking double; .and.returnValue() を追加して、応答内容を制御します。
  • jasmine.createSpy('name') アタッチするオブジェクトがないコールバックに対して、スタンドアロンのdouble型オブジェクトを作成します。
  • 非同期仕様 非同期として宣言され、待機される場合もあれば、Promiseを返す場合もあり、または、正確に一度だけ呼び出される必要がある完了コールバックを受け入れる場合もある。

スパイは仕様間でリセットされるため、スイートがスタブ化されたメソッドを次のテストに漏洩することはありません。この分離により、失敗した仕様は一連の欠陥ではなく単一の欠陥を指し示すようになり、これは、 単体テスト ファンダメンタルズ。

ジャスミン vs モカ vs ジェスト

Jasmineは、支配的な3つのフレームワークの1つです。 Javaスクリプトのテストを行う場合、選択は通常、どれだけの配線作業を自分で管理したいかという点に尽きます。

側面 ジャスミン モカ 冗談
アサーション 内蔵 追加、通常はチャイ 内蔵
スパイと嘲笑者 内蔵 追加、通常はシノン 内蔵
実行 シリアル シリアル プロセス間で並列処理
スナップショット いいえ いいえ はい
共通の家 Angular、プレーンなNode.js 柔軟なNode.jsスタック Reactと最新のバンドラー

Pick モカ 独自のアサーションおよびモックスタックを構築したい場合、 冗談 並列実行の場合、構成制御よりもカバレッジとスナップショットが重要になります。Jasmineは、完全な状態で提供される最も軽量なオプションであり、そのため、 自動化テスト スイート。

よくあるご質問

Jasmineはspec_dirをプレフィックスとして読み込み、次にspec_filesにリストされているすべてのグロブを読み込むため、一致するファイルのみが実行されます。感嘆符で始まるパスは除外され、ヘルパーはスペックの前に一度ロードされて共有設定を登録します。

仕様を非同期として宣言し、呼び出しを待機するか、プロミスを返すか、完了コールバックを受け入れます。 非同期ガイド done は正確に 1 回だけ実行されなければならず、そうでない場合は失敗が間違った仕様に渡ってしまうと警告します。

ランナーの後にパスまたはグロブを渡します。例えば、`npx jasmine spec/appSpec.js` のように指定します。`--filter` フラグは、記述名に一致するパターンを受け入れるため、単一のスイートを作業している間、フィードバックを迅速に得ることができます。

その ジャスミンノード パッケージはメンテナンスモードのままで、Jasmine 1.3 をバンドルしており、Node.js 10 と 12 を最新バージョンとしてリストしています。公式の Jasmine パッケージ trac代わりに、フレームワークとサポートされているNode.jsリリースを使用してください。

仕様の先頭に x を付けると(例: xit または xdescribe)、Jasmine はそれを保留中として報告します。先頭に f を付けると(例: fit または fdescribe)、フォーカスされた仕様のみが実行されます。コミットする前に、両方のプレフィックスを削除してください。

AIアシスタントは、既存のモジュールから記述ブロック、マッチング条件、エッジケースを数秒で作成し、断続的に失敗するスイートを特定します。しかし、誤った動作について自信満々に断言すると欠陥が隠蔽されるため、生成された仕様はすべてレビューが必要です。

GitHubコパイロット 入力と同時に仕様書本体を補完し、エージェントモードではリファクタリング後に破損した仕様書を修復するプルリクエストを作成できます。差分を提案として扱い、スイートを自分で実行してください。

Angular は依然として Jasmine 仕様をスキャフォールディングし、 Protracタ アーカイブされる前は、Jasmineをデフォルトのフレームワークとして使用していました。現在、チームはブラウザ用にJasmineとKarmaを組み合わせたり、ブラウザフローを Cypress そして劇作家。