【发布时间】:2014-07-09 03:22:44
【问题描述】:
我有以下控制器:
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
发生的情况是,正在调用的 perform 方法不是定义的方法。我试过做p 'hello worlds',但它没有显示在那里。
【问题讨论】:
-
您应该只测试
perform方法,以及使用您的ID 调用方法OrderProcessorWorker.perform_async的事实。其他东西已经测试过了,因为它具有 gem 功能。
标签: ruby-on-rails ruby rspec sidekiq