編寫Rspec控制器測試,但試圖忽略某些方法,即通過API(例如Mail Chimp或Google Drive)實際上將某些內容發佈到第三方的方法。控制器測試,忽略某個動作中的某些方法
例如我的控制器代碼:
def create
@request = Request.new(request_params)
if @request.save
flash[:success] = true
@request.save_spreadsheet
RequestMailer.confirmation_email(@request, request.host_with_port).deliver
redirect_to edit_request_path(@request.edit_id)
else
render 'new'
end
end
哪裏save_spreadsheet是保存到谷歌電子表格的方法。當我測試控制器,比如像這樣:
describe "POST create - with valid data" do
it "creates a new request" do
expect{
post :create, request: FactoryGirl.attributes_for(:request)
}.to change(Request,:count).by(1)
end
end
我想測試控制器,但並非FactoryGirl數據保存到電子表格,這是目前正在發生的事情。任何想法如何做到這一點?
哇好,謝謝,我非常新的這個存根概念。看看@pbrisbin在下面寫的是什麼,好像我需要做一些其他的聲明和存根,並且不能夠完全正確地複製上面的代碼? – james
我不這麼認爲。你在做什麼是控制器測試。控制器測試是一種功能測試,但不是單元測試,所以完全可以接受其他應用程序。在這個例子中,你只需要確保RequestMailer能夠正確調用。這僅僅是一個例子。對於其他事情你可以寫其他測試。 –
好吧,這是有道理的,但我遇到的另一個問題是調用save_spreadsheet方法,所以我需要將它存根。如果我從你的代碼推斷,我可以寫一些像expect(GoogleDrive).to接收(:save_spreadsheet).with(任何東西)的東西;發佈:創建,請求...? – james