最近何でもJavascriptで書くようになったので、CLI用途のJavascriptのデバッグ手順をまとめてみる。
使うものは以下のとおり。
- debugging : nodeclipse
- test framework : jasmine-node
Eclipseにnodeclipseを入れる
Site : http://www.nodeclipse.org/
NodeclipseというEclipseでNodejsをデバッグできるようにする環境があるようなので、それを利用する。
- 1: http://www.nodeclipse.org/updates/ から、Enide Studio 2014をダウンロード。
- 2: Eclipseを起動して、Install New Softwareから、 http://www.nodeclipse.org/updates/ をUpdate siteにして、"1st Nodeclipse Core"のdirectoryのものをすべてinstallする
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を使っている。
- Jasmine-node : https://github.com/mhevery/jasmine-node
- Jasimne 1.3 : http://jasmine.github.io/1.3/introduction.html
一応スペックの例。
/** * @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を作る。
あとは、ブレイクポイントを指定して、デバッグボタンを押せば、デバッグができる。
雑感
Vimmerなので、基本的にJSを書く時はEclipseを使わないのだけど、エディタを使っていると、現在のデバッガーの恩恵を得られない。デバッガーを使えればすぐ分かることなのに、そのプログラムの動きを読むためにコンソールに出力するのは馬鹿馬鹿しく思う。