我編寫以下規格:故障使用RSpec與方法
it "should call user.invite_friend" do user = mock_model(User, :id => 1) other_user = mock_model(User, :id => 2) User.stub!(:find).with(user.id).and_return(user) User.stub!(:find).with(other_user.id).and_return(other_user) user.should_receive(:invite_friend).with(other_user) post :invite, { :id => other_user.id }, {:user_id => user.id} end
但我發現了以下錯誤,當我運行規範
NoMethodError in 'UsersController POST invite should call user.invite_friend' undefined method `find' for # Class:0x86d6918 app/controllers/users_controller.rb:144:in `invite' ./spec/controllers/users_controller_spec.rb:13:
有什麼錯誤?沒有.with它工作得很好,但我希望stub方法的不同參數有不同的返回值。以下控制器的操作可能是相關的:
def invite me.invite_friend(User.find params[:id]) respond_to do |format| format.html { redirect_to user_path(params[:id]) } end end def me User.find(session[:user_id]) end
「這並沒有回答這個更大的問題:我怎麼存根多種方法與參數調用根據我的經驗,你不能那樣做。「存根方法可以接收參數爲參數的塊,並且可以根據該參數的值返回不同的對象。 – arieljuod 2017-10-19 22:00:07