【问题标题】:Rspec Rails errorRspec Rails 错误
【发布时间】:2016-02-10 13:57:09
【问题描述】:
let(:valid_attributes) {
    {
      "first_name" => "MyString",
      "last_name" => "LastName",
      "email" => "email@example.com",
      "password" => "password12345",
      "password_confirmation" => "password12345"
    }
  }

it "sets session when" do
        post :create, {:user => valid_attributes}, valid_session
        expect(session[:user_id]).to eq(valid_attributes.id)
end

当我在 test 上面运行时,它失败了 失败/错误:expect(session[:user_id]).to eq(valid_attributes["id"])

预期:无
得到:1

但是当我将其更改为以下代码时,它通过了测试。但这两者有什么区别。为什么第一个失败了。

it "sets session when" do
        post :create, {:user => valid_attributes}, valid_session
        expect(session[:user_id]).to eq(User.find_by(email: valid_attributes["email"]).id)
end

【问题讨论】:

    标签: ruby-on-rails ruby rspec rspec-rails


    【解决方案1】:

    valid_attributes.id 与任何 Rails 魔法无关。您已将值(哈希)分配给 let 中的 valid_attributes 并与之进行比较。此值在测试执行期间未更改,也未从数据库更新。 valid_attributes.id 从未设置 ⇒ 它是 nil

    在后一种情况下,您执行一个 post 操作,然后检查该值是否已成功存储在数据库中。

    【讨论】:

      【解决方案2】:

      valid_attributes 只是一个哈希,它与您的 User 对象没有任何关系。您的帖子将创建一个 User 对象,该对象将具有一个 id,您基本上是在尝试通过您的测试期望来检查它是否存在。

      【讨论】:

        猜你喜欢
        • 2015-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-20
        • 2014-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多