如何检查rake任务是否完成?

时间:2017-11-06 15:52:36

标签: ruby-on-rails ruby rspec rake

这是我第一次使用RoR和使用rspec工具测试控制器。但是在方法中,我使用rake任务来创建这样的异步解决方案:

 def scan_all_urls
   system 'rake scan_all_urls &'
 end

我的佣金任务就是:

 task :scan_all_urls => :environment do
   crawler = Crawler.new
   urls = Url.all
   crawler.scan_urls(urls)
 end

但我的问题是,在rspec测试中:

it 'should scan all url' do
    params = {}
    get 'scan_all_urls', params: params, format: :json
end

如何设置等待rake任务完成?

1 个答案:

答案 0 :(得分:1)

您无法真正检查rake任务是否已完成。我建议你为Crawler#scan_urls编写好的规范,也许可以在控制器中检查Crawler被调用。

另外,测试控制器规范中的返回值。因此控制器规范可能看起来像这样

it 'should scan all url' do
    expect(Crawler).to receive(:new).and_call_original

    params = {}
    get 'scan_all_urls', params: params, format: :json

    expect(MultiJson.load response.body).to # something
end