我有一个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”?,为什么没有正确传递用户对象?
答案 0 :(得分:4)
post :create
期望用于创建用户记录的用户模型的属性。你看到“user”=> “1”因为它将您创建的用户的id传递给:user参数。
您不想创建用户记录来测试创建操作。您希望为创建操作创建属性哈希以创建记录。
你可以写这样的东西(假设这会通过你的模型验证):
user_attributes = { :email => "something@example.com", :username => "something" }
post :create, user: user_attributes