- BDDスタイル
- 構造的なスペック記述
- topicによる対象の明示化
- 非同期処理(特にNodeのconventionに即している非同期処理)への適応
- 構造によるparallelな実行とsequentialな実行
- 標準のAssertモジュールを拡張したアサーション
Contextを保持したオブジェクト、keyがそのContextへの記述になる
Topic, Vow, Contextを保持したオブジェクト、Topicは任意、Contextはネストして保持することができる
Context内でkeyが"topic"のvalue、値 or 関数の戻り値 or 関数内でコールバックされる値がそのContext内のVowに渡される
assertを記述する関数、keyがそのVowへの記述になる
'オブジェクト -> そのオブジェクトのメソッドや振る舞いにフォーカスするのを構造的に': {
topic: new SomeObject,
'objectの状態をassert': function(obj) {...},
'メソッドにフォーカスで子コンテキストに展開': {
topic: function(obj) { return obj.someMethod() },
'戻り値は○○だ': function(retVal) {...},
},
'非同期処理などの振る舞いも子コンテキストに展開': {
topic: function(obj) { obj.asyncMethod( this.callback ) },
'引数が○○でコールバックされる': function(err, val) {...}
}
}
- 例外の振る舞い、assert.throw()あるけど、主題をtopicに書く思想と合ってなくないか?(topicの例外をVowに渡すのも若干分かりづらいし...)
- スタブやモックがない(JasmineでいうSpy Object)
- 振る舞い記述のDSLとしてはAssertion形式よりMatcher形式のほうが好み