おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

Rspec で rake タスクをテストする用の gem を作った

しばらく前に表題の gem を作りました。

willnet/rake_shared_context

中身はただの shared_context です。これは僕のオリジナルな gem ではなくて、thoughtbot 社のブログに書かれた shared_context のコードをほぼそのまま gem にした感じです。毎回 rake タスクをテストするためにブログからコピペしてくるのが面倒になったので作りました。

これを使うと下記のような rake タスクがあったときに

# lib/tasks/reports.rake
namespace :reports do
  desc "Generate report"

  task :generate => :environment do
    ReportGenerator.generate
  end
end

下記のような感じで rake タスクのテストを書くことができます。

# spec/lib/tasks/reports_rake_spec.rb
describe "reports:genereate" do
  include_context "rake"
  before { ReportGenerator.stubs(:generate) }

  its(:prerequisites) { should include("environment") }

  it "generates the report" do
    subject.invoke
    ReportGenerator.should have_received(:generate)
  end
end

どうぞご利用ください。微妙な点もいくつか残っているので気になったら pull request いただけるとありがたいです。