私はそのようなタスクを持っています/lib/crawler.rake
:
namespace :crawler do
area_names = Dir[Rails.root.join("lib", "crawler", "*.rb")].map do |file_name|
File.basename(file_name, ".rb")
end
area_names.each do |area_name|
task area_name.to_sym => :environment do
logger = Logger.new("log/crawl_#{area_name}.log")
# do something
parallel_results = crawler.crawl
mutex = Mutex.new
Parallel.each(parallel_results, in_threads: [parallel_results.count, CRAWL_CONFIG["building_thread_max"]].min) do |pages|
begin
# do something
rescue => e
# do something
raise e
end
end
Availability.update_by_grounds_and_time
end
end
end
ここでのロジックは、並列処理後にすべて問題がなければ、update_by_grounds_and_time
メソッドを呼び出して updateを実行しAvailability
ます。エラーが発生した場合は、アクションを停止してエラーを発生させます。
したがって、これらのケースをテストするためにrspecを書きたいです。ここでタスクの出力をモック/スタブ化し(パスまたはエラーを発生させ)、update_by_grounds_and_time
メソッドを呼び出したかどうかを確認しますか? 本当にタスクを呼び出す必要はありませんか? 使えますRspec Mock
か?
手伝って頂けますか!感謝