blog.bouzuya.net

2016-06-13 bouzuya/beater@0.4.x の API をかんがえた

bouzuya/beater の設計を検討したことを書く。

beater の browser support を進めている。2016-06-10 に書いたとおり、想定どおりに動かなかったため迷走している。

最終的な 2 案は bouzuya/beater#3 にある。それぞれがまったく異なる設計になっている。

案 1 は Test を export する ES Modules を使うものだ。この案の良い点は test() が副作用を持たないことだ。あくまでも test()Test を返す関数であって、その実行はしない。Testrun(tests); のように実行する。reporter を指定するなら run(tests, reporter); だろうか。

import { test } from 'beater';
const t = test('foo 1', () => {
  assert(1 === 1);
});
export default t;

案 2 は test()Test を実行する。同一 instance でないと reporter をまとめられないため、 const { test } = beater();./test/helper.ts などの 1 file にする必要がある。reporter を指定するなら const { test } = beater(reporter); だろう。

import beater from 'beater';
const { test } = bearter();
test('foo 1', () => {
  assert(1 === 1);
});

案 1 は export default t; などの記述を嫌がる声があったのだけど、個人的には案 1 のほうが最終的に扱いやすくなるとは思う。しかし、今回は案 2 で進めようと思う。こちらのほうがよりありふれた test framework に近いからだ。だからこそ案 1 を選びたい気持ちはあるのだけど、まずは post mocha として使ってもらえる test framework を目指したい。