2
我正在使用rspec測試我的項目,現在我需要控制器部分。我測試了這個方法:在使用rspec進行測試時獲取nilClass錯誤
def accept
@app = App.find(params[:id])
@invite = Invite.find_by(app: @app.name, receiver: current_dev.id)
@dev = Developer.find(@invite.sender)
@app.developers << @dev
respond_to do |format|
if @invite.destroy
format.html { redirect_to @app, notice: 'A new developer joined your team!' }
format.json { render :show, status: :destroyed, location: @app }
else
format.html { render :back }
format.json { render json: @invite.errors, status: :unprocessable_entity }
end
end
end
,這是測試部分:
it "should accept an invite (1)" do
invite = Invite.create(:app => "test", :sender => "2", :receiver => "1")
get :accept, :id => 1
assert_response :success
end
但是當我運行RSpec的命令,我得到這個錯誤:
InvitesController should accept an invite (1)
Failure/Error: @dev = Developer.find(@invite.sender)
NoMethodError:
undefined method `sender' for nil:NilClass
所以我假設邀請對象是nil
,但我無法弄清楚爲什麼會發生這種情況。我通過瀏覽器測試功能,一切正常。這也會在不同的控制器方法中導致相同的錯誤,每次只是因爲我的邀請對象是nil
。這是爲什麼發生?
在'accept'方法添加一個斷點,看看是否'@app.name ==「test''。如果是,那麼檢查'current_dev.id == 1'。 – ndn
我最初的猜測是你創建的Invite沒有1的id。如果是這樣的話,只需將它作爲參數添加到規範中的Invite.create'調用。 – ndn
等待,您看到的1作爲:get參數是由於我的路線爲方法是: apps /:id/requests/accept – AlterEchoes