nodejs、jasmineを、Eclipseでデバッグする

最近何でもJavascriptで書くようになったので、CLI用途のJavascriptデバッグ手順をまとめてみる。

使うものは以下のとおり。

  • debugging : nodeclipse
  • test framework : jasmine-node

Eclipseにnodeclipseを入れる

Site : http://www.nodeclipse.org/

NodeclipseというEclipseでNodejsをデバッグできるようにする環境があるようなので、それを利用する。

Node.js プロジェクトを作って、jasmine-nodeをインストールする

Node.js プロジェクトが作れるようになっているので、作る。ここで、ただのJSソースコードでもデバッグ可能になる。

Jasmineでテストしたいため、プロジェクトにJasmine-nodeをインストールする。本来は、package.jsonを作っておけば自動的にインストールできるようだが、とりあえず手動インストールする。

以下、コンソール上で操作

cd プロジェクトのディレクトリ
mkdir node_modules
npm install jasmine-node

npm installで-gオプションを付けなかった時の挙動が、前はcurrent directoryだったのに、今はhome directoryに変わったようだ。current directoryにインストールするには、事前に"node_modules"のディレクトリを作っておけばいい。

specを作って、デバッグする

"spec"ディレクトリ内に、moduleName.spec.jsを作る。jasmine-nodeの書き方自体は本家参照。なお、Jasmine-node自体は、Jasmine 1.3を使っている。

一応スペックの例。

/**
 * @fileoverview マイモジュールの スペック
 */
// テスト対象モジュール
mymodule = require("../mymodule").create();

describe("基本機能", function() {

    it("戻り値がObjectであること", function() {

        var result = module.method();

        expect(typeof result).toBe('object');

    });

    it("非同期系の動作をすること", function(done) {

        var counter = 0;

        setTimeout(function(){

            // 非同期で実行されている
            expect(counter).toBe(1);

            // 第1引数のdoneを実行すれば完了になる
            done();

        }, 10);

        // 先に実行される
        counter++;

    }, 200); // タイムアウト時間までにdoneが呼ばれなければfail

});

以下のようにDebug Configurationを作る。

f:id:j74th:20140429100435p:plain

f:id:j74th:20140429100445p:plain

あとは、ブレイクポイントを指定して、デバッグボタンを押せば、デバッグができる。

雑感

Vimmerなので、基本的にJSを書く時はEclipseを使わないのだけど、エディタを使っていると、現在のデバッガーの恩恵を得られない。デバッガーを使えればすぐ分かることなのに、そのプログラムの動きを読むためにコンソールに出力するのは馬鹿馬鹿しく思う。