【问题标题】:RSpec passing object as a param in a controller_specRSpec 将对象作为参数传递给 controller_spec
【发布时间】:2013-02-06 12:47:22
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails rspec rspec2


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      相关资源
      最近更新 更多