rspecでテストコードを作成します。私はコールバックが実行されているかどうかをテストしたい。
task main: [:callback]
は、main
の前にcallback
を実行することを意味します。rakeタスクコールバックをテストする方法
しかし、私のテストは失敗しました。私はcallback
が実行されていないように見えます。どうして?
require 'rails_helper'
require 'rake'
RSpec.describe 'Rake::Task' do
before(:all) do
@rake = Rake::Application.new
Rake.application = @rake
Rake.application.rake_require('rspec_before', ["#{Rails.root}/lib/tasks"])
end
subject { @rake['rspec_before:main'].execute }
it "expects run callback before main task" do
expect{ subject }.to output(/Hello, world/).to_stdout
end
end
私のレーキの仕事は以下の通りです。だから、
namespace :rspec_before do
task :callback do
@greeting = "Hello, world"
end
# case 1
# In this case, `callback` is NOT executed in rspec
# In console, `callback` is executed !!!!
desc "main task"
task main: [:callback] do
puts @greeting
end
# case 2
# In this case, `callback` is executed in rspec
# task :main do
# Rake::Task['rspec_before:callback'].execute
# puts @greeting
# end
end