eater / beater

0
bouzuya @bouzuya

eater は(yosuke_furukawaの言葉を借りれば)「スクリプトランナー」。テストフレームワークの知識に書かれたスクリプトをテストとして動かす。たとえば example や、assert だけで書かれたものを動かすイメージ。(続)

2016-06-09 00:16:54
bouzuya @bouzuya

file 単位で child_process.fork するので、他の file への影響を気にする必要はない。file ごとに stderr への出力があれば その file (test) を fail と見なす。1 file 1 test なイメージ。(続)

2016-06-09 00:19:20
bouzuya @bouzuya

一応 eater/runner に test が生えていて 1 file n tests にできる。私見ではこの使いかたは eater に適していない気がしている。他の test を気にしないといけないし、eater というテストフレームワークの知識を持ってしまう。(続)

2016-06-09 00:22:19
bouzuya @bouzuya

eater の良いところは test framework を考慮しない script を test できる点にある。それは file 単位に child_process.fork し、stderr を検査するという simple な rule によって実現されている。(続)

2016-06-09 00:25:31
bouzuya @bouzuya

全体としての size も小さい。たとえば mocha のように assert を外部に任せている。この構造も eater のコンセプトを考えれば当然のことだ。

2016-06-09 00:28:07
bouzuya @bouzuya

eater から派生した beater は test framework / runner だ。eater が test を想定しない script を test として動かすのに対して、beater は test script を test として動かす。(続)

2016-06-09 00:30:31
bouzuya @bouzuya

file 単位で child_process.fork する点は同一だが、test の利用を前提としている。1 file n tests が基本だ。file ごとの独立性は保証されるが、 test ごとの独立性は user が考慮する。(続)

2016-06-09 00:33:09
bouzuya @bouzuya

そのために test ごとの before / after を考慮した helper (fixture) を備えている。test の挙動は eater と似ているが callback ではなく戻り値の Promise を判定に利用する。非同期処理は Promise を返す。(続)

2016-06-09 00:35:19
bouzuya @bouzuya

また test ごとの reporter をより重視しており、stderr ではなく Error (AssertionError) を reporter に渡せるようにしている。reporter をすべて外部に置いている点でも eater とは異なる。(続)

2016-06-09 00:37:07
bouzuya @bouzuya

eater と違って beater は一般的な test framework / runner だ。mocha / tape / AVA などと比較しても良い。特徴は global 汚染なし assert は外部依存 file 単位の fork 、simple な api 。

2016-06-09 00:38:52
bouzuya @bouzuya

beater ぼくの当時の eater への不満を解消するようにつくっただけなんだけど、もともとの eater のコンセプトを理解していなかったこともあって、実装的には似ているが設計思想・コンセプト的に別物だと言っていい。

2016-06-09 00:47:29