JavaScriptのテストコードをNode.js+Jasmineで実行してみよう

CodeZine / 2014年2月27日 14時0分

テスト実行結果

 本連載は、テストコードをこれから書こうと考えているJavaScript技術者を対象に、テストコードの意義から、テスト駆動開発、JavaScriptでのテストコードの書き方、継続的インテグレーションなどテスト全般にわたって解説します。また、原理原則だけでなくWhyから説明し、チームメンバーを巻き込みながら開発現場に活かせる考え方を総合的に解説します。第3回目の本稿は、Node.jsでのテストの実行方法を、JasmineというJavaScriptテスティングフレームワークを使って説明します。前半はJasmineの基礎、後半はテスト駆動開発の流れに沿って、Jasmineでテストの書き方を紹介します。

■対象読者

JavaScriptの基本をある程度理解している方 テストコードをこれから書こうと考えている方 ■Jasmineとは

 Jasmineとは、JavaScriptのテスティングフレームワークです。Mochaなどのテスティングフレームワークとは違い、値を評価するためのアサーションモジュールも内包されています。また、CoffeeScriptでの記述も可能です。

 Jasmineは振る舞い駆動(BDD)の形式でテストを記述します。BDDは、作成する機能に期待する「振る舞い」を文章で記述していきます。言い換えると、顧客が望んでいるであろう「要求仕様」に近い形でテストを表現しながら、テストと実装を記述していく手法です。

 リスト01は、Jasmineで記述した基本的なテストコードです。このコードを文章として日本語に直訳すると「【処理結果】が【期待する値】と同じでないと予測(expect)する」です。単純に【処理結果】と【期待する値】が一致していないということだけでなく、テストコードを読むと、その評価の内容を振る舞いとして文章のように読むことができます。Jasmineでは、expectメソッドの引数がメソッドなどの処理結果、一番右側の評価を行うメソッドの引数は期待する値を入れます。

リスト01:評価メソッドの例
expect(処理結果).not.toEqual(期待する値);
 Jasmineはブラウザで動作するテスティングフレームワークとして開発されましたが、Node.jsで使用できるjasmine-nodeも公開されています。構文は両方とも同じものが使用できます。本稿では、jasmine-nodeの使用方法を解説します。

 Jasmineのマニュアルは、以下のURLにあります。

JasmineJasmine-node■テストコードを実行する準備

 それでは、Node.jsでJasmineを使ってテストコードを実行するための準備を行います。

●Node.jsとJasmineのインストール方法

 Node.jsをインストールしてみましょう。まずは、以下のサイトからNode.jsインストール実行ファイルをダウンロードし、実行します。ここでは、Windowsでのインストール方法を説明します。

http://nodejs.org/ Node.jsのインストール


 次に、インストールが完了したかどうか、確認しましょう。コマンドプロンプトを起動し、以下のコマンドを実行してみてください。nodeコマンドのヘルプを参照してみます。以下のように表示されていれば成功です。

リスト02:nodeコマンドの実行
node -h
Node.jsインストール結果の確認


 続いて、テスティングフレームワークであるJasmineのインストールを行います。Node.js版はjasmine-nodeというモジュールをインストールします。Node.jsのモジュールは、npmコマンドを使ってインストールを行います。npmは、Node.js向けパッケージ管理ツールです。多くのNode.js向けのオープンソースのモジュールが登録されています。

 以下のコマンドを実行してください。必要なモジュールが自動的にダウンロードされ、Jasmineのインストールが完了します。「-g」オプションは、グローバルインストールという意味で、npmのインストール場所にパッケージがインストールされます。

リスト03:jasmine-nodeのインストール
npm install -g jasmine-node
 Jasmineのインストールが完了したかどうかを確認しましょう。nodeコマンドと同様、Jasmineのヘルプを参照してみます。以下のように表示されれば成功です。

リスト04:Jasmineコマンドの実行
jasmine-node -h
jasmine-nodeのインストール結果の確認




CodeZine

トピックスRSS

ランキング