block_given?

ジャングル ブロック ナイ アルノハ jump ダケ。CC-BY-SA 3.0

なんでも肯定してくれるruboty-yesを公開した

f:id:block_given:20141031020525p:plain

ハマった

  • RSpecのTurnipを使うRakeタスクの定義
  • Rubotyのreply時のto/fromの扱い
  • Rubotyのテストをどうかくとうまくいくのか考える時間

Turnipのシナリオ

最初シナリオで使う人物名を実在の人物名にしてしまった。 架空の名前を考えてシナリオを書くのは難しい。

Rubotyのテスト

今回は受け入れテストだけ書いてみた。 テスト中で実際にRuboty::Robotを作成し、動かしている。

Ruboty::Adapters::Baseを継承したアダプタを定義すると、最後に定義されたアダプタが使われるようになる。今回はMockアダプタを定義した。Mockアダプタは特に何もしない。

Ruboty::Robotの発言を監視するためRuboty::Robotを拡張するRuboty::Testableモジュールをprependした。今回は、Rubotyの発言の記録を取れればいいので、sayを奪った、それに合わせて最小限のインターフェイスを定義してやった。

saidを直接のぞいてる部分はsaid?で置き換えた方がうまくいきそうだなぁと書き終わってから気づいた。

まとめ

今回は簡単なテキスト処理のようなものなので、受け入れテストのみ書いた。 ハンドラーやアクションの中でもう少し複雑なことをしている場合は、個々のハンドラー/アクションのユニットテストも書いた方がよいかもしれない。

しかし基本的にはRubotyはチャットをインターフェイスにして動いているので、チャットをベースにした受け入れテストをしっかり書くのがいいんじゃないかと思っている。

READMEがそのままテストとして実行できる夢をみた。