1

これは私のRSpecテストです:

describe "GET #show" do
  it "assigns the requested user to @user" do
    user = FactoryGirl.build(:user)
   get :show, id: user
    assigns(:user).should eq(user)
  end
end

これは私のRailsコントローラーです:

  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @user }
    end
  end

次のエラーメッセージが表示されます。

Failures:

  1) UsersController GET #show assigns the requested user to @user
     Failure/Error: get :show, id: user
     ActiveRecord::RecordNotFound:
       Couldn't find User without an ID
     # /home/tim/fairym/app/controllers/users_controller.rb:25:in `show'
     # ./users_controller_spec.rb:21:in `block (3 levels) in <top (required)>'

テストに合格するために、ここでgetメソッドを使用する適切な方法は何ですか?

4

1 に答える 1

4

を使用する必要がFactoryGirl.createありbuildます。その理由は、create実際にIDを含むデータベースにエントリを作成するためです。buildIDなしで、メモリ内にオブジェクトを作成するだけです。

于 2012-12-18T11:07:34.937 に答える