power-doctestとは

power-doctest は doctest風 にコードと評価結果のコメントを並べるとテストとして実行出来るツールです。

評価したい式; // => 期待する評価結果

詳細は以下で紹介しています。

更新内容

にも書いてあります。

deepEqual support

assertするのに利用しているpower-assertの方で、 assert.deepEqual 等がサポートされてたので、
それに伴ってpower-doctestの方でもassert.deepEqualを使ったテストに対応しました。

テスト書く側は特に何も意識しないで、以下みたいな配列やオブジェクトもテスト出来るようになったという話です。

var ary = ["test","is","array"];
ary; // => ["test", "was", "array"]

内部的にアサーション対象が両方共オブジェクトなら勝手に assert.deepEqual を使って比較します。

deepEqual-tes

deepEqualの注意点

この deepEqual は Node.jsのassert.deepEqualのため、
オブジェクトの中身は === の strictな一致ではなく、 == の一致を見てることに注意です。
(strictなバージョンも欲しい気がする…)

exception tests support

もう一つは、例外おきるかどうかをテストする事が出来るようになりました。

いわゆるassert.throwsみたいな感じのやつです。

こちらも特に文法とかは変わらずに、// => Error という Error と書かれたコメントなら例外を期待してるとしてテストします。

以下みたいに書けば、// => Error の隣にある式などで例外が発生したら、テストがパスします。

throw new Error(); // => Error

var object = {};
object.not.found;// => Error

error-test

内部的には、assert.throwsを使わないで独自にtry-catchしてるので若干エラー表示が違いますが、 assert.throws を使ってやるほうがよいのかな?

テストが失敗した行の一致

初期バージョンだと、テストが失敗したエラーにでる行番号等が不一致だったりしましたが、
以下のようにコードと一致した行番号を表示できるようになりました。

Power doctest 2013 12 08 20 32 54

WebStormだと以下のような形式に該当するならリンクとなってクリックでジャンプできるので便利です。

パースした結果のASTのlocオブジェクトを置換するときに埋め込むことで実現してます。

(内部)オプション

上記の変更のために、単純な assert() への変換ではなく、locを埋め込んだり、try-catchとか色んな処理が挟まった置換になってます。。

power-doctestをモジュールとして使う場合は、内部的に astGenerator , astErrorGenerator 等のオプションにASTを置換するnodeを作るモジュールを渡したり出来るようになってます。(何となく => 式=> Error で別々のルールを適応出来るようにしてます。)

また、エラー表示は reporter オプションに表示方法を定義したモジュールを渡せば、表示方法を変更できるようになってます。

おわりに

自分が欲しかった機能は大体追加できた感じがします。
便利なGrunt Taskとか誰かが作ってくれるといい気がします。

IssueとかPull Request待ってます。