オブジェクト同士の比較と例外のテストをサポートしたpower-doctest 0.2.0リリース
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の注意点
この 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
内部的には、assert.throws
を使わないで独自にtry-catchしてるので若干エラー表示が違いますが、 assert.throws
を使ってやるほうがよいのかな?
テストが失敗した行の一致
初期バージョンだと、テストが失敗したエラーにでる行番号等が不一致だったりしましたが、
以下のようにコードと一致した行番号を表示できるようになりました。
WebStormだと以下のような形式に該当するならリンクとなってクリックでジャンプできるので便利です。
パースした結果のASTのlocオブジェクトを置換するときに埋め込むことで実現してます。
(内部)オプション
上記の変更のために、単純な assert()
への変換ではなく、locを埋め込んだり、try-catchとか色んな処理が挟まった置換になってます。。
power-doctestをモジュールとして使う場合は、内部的に astGenerator
, astErrorGenerator
等のオプションにASTを置換するnodeを作るモジュールを渡したり出来るようになってます。(何となく => 式
と => Error
で別々のルールを適応出来るようにしてます。)
また、エラー表示は reporter
オプションに表示方法を定義したモジュールを渡せば、表示方法を変更できるようになってます。
おわりに
自分が欲しかった機能は大体追加できた感じがします。
便利なGrunt Taskとか誰かが作ってくれるといい気がします。
IssueとかPull Request待ってます。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。