我有以下控制器:
def create
@order = Order.create(order_params)
OrderProcessorWorker.perform_async(@order.id)
end
以下工人:
def perform(order_id)
#.. some logic
@order.status = 'processed'
@order.save
#.. some other logic
end
我的问题是......测试作业正在改变订单状态的正确方法是什么?这个gem https://github.com/philostler/rspec-sidekiq有助于测试作业是否排队,延迟,重试......等等。但是你如何测试工作实际上在做什么?
编辑:这就是我所做的:describe OrderProcessorWorker do
describe '#perform' do
context 'an order without any pages' do
it 'changes the status of the order to missing_pages' do
FactoryGirl.create(:order_processing_status)
p OrderProcessingStatus.all # => This shows the just created order_processing_status
order = FactoryGirl.create(:order)
subject.perform(order.id)
end
end
end
end
发生的情况是,被调用的执行方法不是定义的方法。我尝试过做p 'hello worlds'
并且没有在那里显示。
答案 0 :(得分:1)
要测试您的员工是否正在执行您打算执行的工作 - 请测试perform
而不是perform_async
:
describe OrderProcessorWorker do
it 'changes order status' do
subject.perform(order_id)
expect(Order.find(id: order_id).status).to eq 'processed'
end
end
答案 1 :(得分:1)
如果您正在测试create
:
assert_equal 0, OrderProcessorWorker.jobs.size
post :create, ...
assert_equal 1, OrderProcessorWorker.jobs.size