4

私はこれでusers_controller_spec.rbを持っています:

describe "POST create" do
  describe "with valid params" do
    let(:user) { create(:user) }

    it "assigns a newly created user as @user" do
      post :create, user: user
      assigns(:user).should be_a(User)
      assigns(:user).should be_persisted
    end
  end

 ...

end

Debugginコントローラーが次のパラメーターを受け取ることがわかりました

(rdb:1) pp params
{"user"=>"1", "controller"=>"users", "action"=>"create"}

なぜ"user"=> "1"?、なぜユーザーオブジェクトを正しく渡さないのですか?

4

1 に答える 1

4

post :createユーザーレコードの作成に使用するユーザーモデルの属性を期待します。作成したユーザーのIDを:userパラメーターに渡しているため、「user」=>「1」と表示されています。

作成アクションをテストするためにユーザーレコードを作成する必要はありません。レコードを作成するためのcreateアクションの属性のハッシュを作成するとします。

次のように書くことができます(これがモデルの検証に合格すると仮定します):

user_attributes = { :email => "something@example.com", :username => "something" }
post :create, user: user_attributes
于 2013-02-06T15:28:16.087 に答える