spec/rake_helper.rbを作成する。
テスト全体の設定を記述↓
require 'rails_helper'
require 'rake'
RSpec.configure do |config|
config.before(:suite) do
Rails.application.load_tasks # Load all the tasks just as Rails does (`load 'Rakefile'` is another simple way)
end
config.before(:each) do
Rake.application.tasks.each(&:reenable) # Remove persistency between examples
end
end
spec/lib/tasks/update_task_spec.rbを作成
テスト内容を記述↓
require 'rake_helper'
describe 'update_task:change_state' do
subject(:task) { Rake.application['update_task:change_state'] }
before do
create(:task, state: :doing, published_at: Time.current - 1.week)
create(:article, state: :doing, published_at: Time.current + 1.week)
create(:article, state: :do)
end
it 'is succeed.' do
expect{ task.invoke }.to change { Task.time_out.size }.from(0).to(1)
end
end
subjectに起動したいrakeタスクを指定する。
it内のtask.invokeでrakeタスクの起動をかけて、change以下でtaskの変化をテストする。
今回の例で言えば、
Taskのstateカラムがrakeタスクを起動すれば1つ増えるはずなので、from(0).to(1)で増えることを期待している。
参考