0
下面是傳遞!Rspec控制器測試 - 如何存根和/或測試自定義對象
控制器代碼:
class OrdersController
def create
...
@order.save
end
end
規格代碼:
describe OrdersController do
it "should call save method" do
Order.any_instance.should_receive(:save)
post :create
end
end
但是,如果只有它是那麼容易......我有被執行後,一些自定義的作業對象保存,所以代碼實際上看起來像這樣:
控制器代碼:
class OrdersController
def create
...
@order.save
RoadrunnerEmailAlert.new.async.perform(@order.id, true)
CalendarInvite.new.async.perform(@order.id)
RoadrunnerTwilioAlert.new.async.perform(@order.id)
end
end
我很想測試自定義對象正在接受與正確的參數方法的鏈,但不知道怎麼回事,總之創造規範的代碼是這樣的:
before do
class RoadrunnerEmailAlert
def async
end
end
end
但是,這是如此人爲的,它肯定是不正確的...建議表示讚賞!
你能嘗試這樣的事嗎?這對其他人也有幫助。 'RoadrunnerEmailAlert.new.async.stubs(:perform).with('some_id',true)。返回('your_expected_result')' –
這並不奏效,但可能是因爲這項工作的性質,我爲#得到了'未定義的方法'存根''但即使我要在工作內部調用objet,'OrderMailer.new(id,true).deliver'我會得到'錯誤數量的參數'這意味着它不是骯髒的 –
james
你在這個控制器測試中應該關注的是A )Order對象被保存,B)每個異步作業被觸發。我強烈建議不要測試操作中調用哪些方法,但操作的結果是什麼。也就是說,您的測試應該聲明訂單記錄在數據庫中,並且每個異步作業的結果都是正確的。許多異步作業框架都有用於此目的的測試設置。你使用的是什麼異步作業框架? Sidekiq? – Chris