👌
Rails上に定義したRakeタスクをテストする
概要
Rails上に定義したRakeタスクをテストする方法を記載します。
やってみる
lib/tasks/books.rake
# frozen_string_literal: true
namespace :books do
task :read, ['name'] => :environment do |_task, args|
pp "I read #{args[:name]}."
end
end
spec/lib/books_spec.rb
# frozen_string_literal: true
require 'rails_helper'
describe 'books:read' do
let(:task) { Rake.application['books:read'] }
before(:all) do
Rails.application.load_tasks
end
before(:each) do
# 2回目のタスク実行を可能にする
Rake.application.tasks.each(&:reenable)
end
it do
expect { task.invoke('koukyou') }.to output("\"I read koukyou.\"\n").to_stdout
end
it do
expect { task.invoke('rongo') }.to output("\"I read rongo.\"\n").to_stdout
end
end
Discussion