blog.bouzuya.net

2019-12-07 beater の Test について悩んでいる

bouzuya/beaterTest を変えようかと思っている。まだ迷っている。

いまは Testtest() でつくるようになっている。実体は↓だ。

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 を別で取るんだ。

次に namefunction name()name じゃだめなのかと。他の言語だと関数名・メソッド名をテスト名にしている例がままある。仮に空白が使いにくいからだとしてもそのときだけ test(name, fn) を。実装としては Object.defineProperty(fn, 'name', name); を使えばいいのではないか。あとは name を省略しても別に良い気もしている。 test(name, fn)name を必須化することに違和感がある。

Test を単純に Function としてしまえばいいんじゃないか。 namefunction name() でも良いし必要なら Object.defineProperty を wrap した helper を使えばいい。 meta も必要に応じて Object.defineProperty でいいんじゃないか。

そうすれば beater の API から test は削除されて runrunWithOptions だけになる。 run* しかないのは runner 感が出ていいんじゃないか。と。


またひとつ照明を Google Home で操作できるものに変えた。


『実践 Rust 入門』第 4 章を読んだ。