- 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形式のほうが好み