
Jasmineは2009年頃にPivotal Labs(Rajan Agaskar、Davis W. Frankら)が開発を始め、2010年に正式公開したJavaScript向けの振る舞い駆動開発(BDD)テストフレームワークである。RSpecの記法をJavaScriptへ持ち込んだ草分け的存在で、外部依存なしでブラウザでもNode.jsでも動作する。AngularJSの初期テスト基盤として広まり、現在もAngular公式構成やKarmaと組み合わせて使われ続けている。本稿ではJasmineの歴史、コアAPI、運用上のポイントを順に整理する。
この記事の目次
- JasmineとBDDのJavaScriptへの導入
- describe/it/expectとマッチャ
- Karma連携とAngularでの採用
- Jest・Vitest時代における立ち位置
- まとめ
JasmineとBDDのJavaScriptへの導入

2009年頃、JavaScriptのテスト環境はQUnitやScrewUnitなどが主流だったが、RubyのRSpecが提示したBDDスタイルの読みやすさをJSへ取り込みたいというニーズが高まっていた。Pivotal Labsはアジャイル開発支援企業として、社内のJavaScriptプロジェクトでRSpec風の記述を可能にすべくJasmineを起こした。2010年公開のバージョン1.0以降、コアなdescribe/it/expect記法は2025年現在まで一貫して保たれている。
Jasmineの設計哲学は「外部依存ゼロ」「シンプルなAPI」「ブラウザ/Node.js両対応」の三本である。DOM操作やビルドツールを前提とせず、タグで読み込むだけで動かせる手軽さは、学習教材やレガシー資産のメンテナンス用途で今も評価される。Jasmineの記法はJestやMochaなどに大きな影響を与え、JavaScriptテスト文化の祖と呼んでよい存在となった。
describe/it/expectとマッチャ

Jasmineのテストはdescribe('対象', () => { it('期待する振る舞い', () => { expect(value).toEqual(...); }); });という形で書く。RSpecと同じ階層を持ち、beforeEach/afterEach、beforeAll/afterAllで前後処理を行う。標準でtoBe、toEqual、toContain、toThrow、toHaveBeenCalledなどのマッチャを揃え、プラグインを追加せずにスパイ・スタブまで実現できる。
スパイ機能はspyOn(obj, 'method')で対象メソッドを差し替える形で、callThrough、returnValue、callFakeなどで挙動を制御する。クロックの偽装はjasmine.clock().install()を使い、setTimeoutやsetIntervalを手動で進められる。非同期は古くはdoneコールバック、現在はasync/awaitで記述するスタイルが主流で、Promiseを返すケース、async関数を渡すケースのいずれも自然に扱える。
Karma連携とAngularでの採用

JasmineはKarmaのフレームワークプラグインとして提供され、Angular CLIで生成したプロジェクトの初期構成ではKarma+Jasmineが標準だった。ng testコマンドの裏側ではKarmaがJasmineテストを実ブラウザで実行する。ブラウザ上ではSpecRunner.htmlを介して結果を可視化でき、CI上ではJUnit XMLへ変換して各種ダッシュボードへ流す。
Jasmine単体でもjasmine-nodeやjasmine-coreを用いることでNode.jsから直接実行できる。型定義は@types/jasmineで提供され、TypeScriptプロジェクトとの相性も良い。Jestのような自動モックや並列ワーカープールこそ持たないものの、軽量で安定しており、シンプルなライブラリの単体テストや、Karma経由の実ブラウザテストでは現在も第一級の選択肢である。
Jest・Vitest時代における立ち位置

現代のフロントエンドでは、JestやVitestがオールインワン型のテスト基盤として主流となり、Jasmine単体を新規採用するケースは減少傾向にある。ただしAngular CLIプロジェクトはJasmine構成が長年標準で、既存資産のメンテナンスは引き続き重要である。また、Jest自体はJasmine 2の上にスナップショットや自動モックを乗せた歴史を持ち、APIの多くがJasmine互換である。
選定の指針としては、Angular既存プロジェクトはJasmineをそのまま使い、React/Vue/Svelteなどモダンなフロント案件ではJestやVitestを採用するのが自然である。また、依存ゼロで動かせる強みを活かし、軽量ライブラリの単体テスト用途で再評価される場面もある。BDDの源流のひとつを担うフレームワークとして、JS開発者は触り方を押さえておきたい。
まとめ
JasmineはBDDをJavaScriptへ持ち込んだ古参フレームワークで、外部依存ゼロというシンプルさとAngularJS/Angular CLIにおける長年の標準ポジションを背景に、現在も保守用途で広く使われている。Jest・Vitestへの流れの中で立ち位置は変化したが、JS向けBDDの歴史と現役の実用性を兼ね備えた、押さえておきたいテストフレームワークである。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント