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"}

为什么“用户”=>“1”?为什么没有正确传递用户对象?

4

1 回答 1

4

post :create期望用于创建用户记录的用户模型的属性。您看到 "user" => "1" 是因为它将您创建的用户的 id 传递给 :user 参数。

您不想创建用户记录来测试创建操作。您想为创建操作创建属性哈希以创建记录。

你可以写这样的东西(假设这会通过你的模型验证):

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