@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Rake の task に対する spec の書き方

rake-confirm という gem を作ってもらったのでさっそく使ってみたところ、 db:rollbackdb:fixtures:load も production 環境でのうっかり実行を防ぎたかったので Pull Request を送った

テストのない Pull Request は reject されそうだなあと思ったので、 Rake の task はどうテストしたらいいのか調べてみたところ、

  • rake-confirm は Rake::Task#enhance を使って事前タスクというものを追加している
  • Rake::Task#prerequisites というメソッドは、タスクに追加された事前タスクのリストを返す

ということがわかった。それを踏まえて書いたテストがこれ https://github.com/hsbt/rake-confirm/commit/92b42a371335a614566d3e40ebc6ff35f91c7833

一般化して書くと、こうなる。