RSpec将对象作为controller_spec中的param传递

时间:2013-02-06 12:47:23

标签: ruby-on-rails rspec rspec2

我有一个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”?,为什么没有正确传递用户对象?

1 个答案:

答案 0 :(得分:4)

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

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

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

user_attributes = { :email => "something@example.com", :username => "something" }
post :create, user: user_attributes