2019-12-07 beater の Test について悩んでいる
bouzuya/beater の Test
を変えようかと思っている。まだ迷っている。
いまは Test
を test()
でつくるようになっている。実体は↓だ。
interface Test {
fn: () => Promise<void>;
meta: Map<string, string>;
}
現状は meta.set('name', name)
に test(name, fn)
の name
が入る。
meta
にいろいろ入れようと思っていた。ただそのための API が思い浮かばない。 testWithMeta(name: ..., map: Map<string, string>, fn: ...)
まどろっこしい。実装が露出しすぎている。かといって [string, string][]
を使うのもよく分からない。どの key に何を入れるのかも悩ましい。そもなぜ name
を別で取るんだ。
次に name
は function name()
の name
じゃだめなのかと。他の言語だと関数名・メソッド名をテスト名にしている例がままある。仮に空白が使いにくいからだとしてもそのときだけ test(name, fn)
を。実装としては Object.defineProperty(fn, 'name', name);
を使えばいいのではないか。あとは name
を省略しても別に良い気もしている。 test(name, fn)
で name
を必須化することに違和感がある。
Test
を単純に Function
としてしまえばいいんじゃないか。 name
は function name()
でも良いし必要なら Object.defineProperty
を wrap した helper を使えばいい。 meta
も必要に応じて Object.defineProperty
でいいんじゃないか。
そうすれば beater の API から test
は削除されて run
と runWithOptions
だけになる。 run*
しかないのは runner 感が出ていいんじゃないか。と。
またひとつ照明を Google Home で操作できるものに変えた。
『実践 Rust 入門』第 4 章を読んだ。