这是我第一次使用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任务完成?
答案 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