我的应用程序中有一些复杂的,长时间运行的delayed_job进程.我正在使用Rspec来测试流程中使用的各个方法和类,但我还想执行许多具有不同测试数据的端到端后台作业.
我在delayed_job wiki上找不到任何关于此问题的内容,这个问题看起来很有意思但我并不真正理解这里发生了什么. 使用rSpec测试delayed_job链的最佳方法是什么?
我可以使用工厂轻松设置测试数据,然后调用启动后台处理的类.我希望测试需要很长时间才能完成.
编辑后台代码
class Singleplex
def perform(batch_id,user)
batch = start_batch(batch_id,user)
... do lots of stuff ...
end
handle_asynchronously :perform, queue: :singleplex, :run_at => Proc.new { 1.second.from_now }
Run Code Online (Sandbox Code Playgroud)
规格/工厂/ batches.rb
FactoryGirl.define do
factory :batch do
batch_type 'singleplex'
name 'valid panel'
status 'ready'
end
factory :batch_detail do
chrom 7
chrom_start 140435012
chrom_end 140435012
target_offset 150
padding 4
primer3_parameter_id 1
snp_mask 't'
status 'ready'
batch
end
end
Run Code Online (Sandbox Code Playgroud)
然后像这样运行测试
describe Batch do
it 'runs Singleplex for a valid panel' do
batch …Run Code Online (Sandbox Code Playgroud) 我想调用一个只返回一条记录的named_scope,但是named_scope返回一个数组,这不是什么大问题,因为我可以用.first链接它.
Model.named_scope(param).first
Run Code Online (Sandbox Code Playgroud)
这是有效的,我正在努力的是如何存根链接的电话.有没有人有关于如何用Rspec嘲笑实现这个目标的参考或答案?