酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

RailsでオリジナルRakeタスク作成からRSpecテストまで

RailsのRakeタスク作成〜RSpecでのテストまでの流れをまとめました。 できるだけシンプルにまとめたので、Rakeタスクの作成に初めてトライされる方はぜひご一読下さい。

02/13 22:10 全体的に説明書きを書き直し


Rake タスクファイルの作成

次のコマンドを実行すると、Rakeタスク用のファイルがlib/tasksの下に作成されます。
(reportsの部分は任意の名前に変更してください)

1
rails g task reports

上で生成されたlib/tasks/reports.rakeに処理を記述。

1
2
3
4
5
6
7
8
9
10
namespace :reports do
  # descの記述は必須
  desc "Generate report"

  # :environment は モデルにアクセスするのに必須
  task :generate => :environment do
    # 処理を記述
    ReportGenerator.generate
  end
end

ここまで完了するとrakeタスクの中にreports:generateが追加されます。

1
2
rake -vT
# rake reports:generate  # hoge の説明" # <= となっていれば成功

次のコマンドで、作成したreports:generateのRakeタスクを実行することができます。

1
rake reports:generate

Rake タスクのRSpecを作成

Rake タスクのテストですが、@netwillnetさんのgem『Rspec で rake タスクをテストする用の gem を作った』で詳解されているgem『rake_shared_context』を使う方法を書いておきます。

この方法は、thoughtbotさんのブログに書かれていたrakeのテスト方法をgem化したものだそうです。こちらも読んでおくと捗ります!

まずはGemfileに以下を追加して、ターミナルでbundle installを実行。

1
2
3
4
gem 'rake'

# shared_context for rake tasks
gem 'rake_shared_context'

spec/lib/tasks/reports_rake_spec.rbを作成して、テストを記述。

1
2
3
4
5
6
7
8
9
10
11
12
require 'spec_helper'

describe 'reports:generate' do
  include_context 'rake'

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

  it 'generates the report' do
    ReportGenerator.should_receive(:generate)
    subject.invoke
  end
end

かなり簡単にRakeタスクのテストができちゃいます!

Special Thanks

変更来歴

12/12/05 22:00 gem ‘rake’インストールを追加
12/12/11 12:55 taskのサンプルコード内にコメントを追記
12/12/17 10:45 コード内の注意書きを追記
13/12/31 16:20 Rails4 x Ruby 2.1環境で動作確認
14/02/13 21:20 全体的に説明書きを書き直し

おすすめの書籍