rspec';什么是eq法?

rspec';什么是eq法?,rspec,Rspec,我有点困惑: class SessionsController < ApplicationController def new @user = User.new end end 但我明白了: FFF 失败: 1) SessionsController#new should eq #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_dig

我有点困惑:

class SessionsController < ApplicationController
    def new
        @user = User.new
    end
end
但我明白了: FFF

失败:

  1) SessionsController#new should eq #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
     Failure/Error: it { expect(assigns(:user)).to eq user }

       expected: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
            got: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>

       (compared using ==)

       Diff:
     # ./spec/controllers/sessions_controller_spec.rb:8:in `block (3 levels) in <top (required)>'

  2) SessionsController#new should eq #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
     Failure/Error: it { expect(assigns(:user)).to eq User.new }

       expected: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
            got: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>

       (compared using ==)

       Diff:
     # ./spec/controllers/sessions_controller_spec.rb:10:in `block (3 levels) in <top (required)>'

  3) SessionsController#new should assign stubbed user
     Failure/Error: assigns(:user).should eq user

       expected: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
            got: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>

       (compared using ==)

       Diff:
     # ./spec/controllers/sessions_controller_spec.rb:13:in `block (3 levels) in <top (required)>'
1)会话控制器#新的应#
失败/错误:它{expect(assigns(:user))。to eq user}
预期:#
得到:#
(使用==进行比较)
差异:
#./spec/controllers/sessions\u controllers\u spec.rb:8:in'block(3层)in'
2) 会话控制器#新的应为#
失败/错误:它{expect(assigns(:user))。to eq user.new}
预期:#
得到:#
(使用==进行比较)
差异:
#./spec/controllers/sessions\u controllers\u spec.rb:10:in'block(3层)in'
3) SessionController#新用户应分配存根用户
失败/错误:分配(:用户)。是否应eq用户
预期:#
得到:#
(使用==进行比较)
差异:
#./spec/controllers/sessions\u controller\u spec.rb:13:in'block(3层)in'

我是说什么?
Diff
部分甚至是空的。如果我使用的是
be
matcher,我会理解,但我使用的是
eq
,那么发生了什么事?

尝试使用eq方法比较
user.attributes
,它应该通过。

在ActiveRecord中,如果两个模型对象具有相同的类和相同的非零主键值,则认为它们是相等的

因此,如果两个相同的对象具有nil
id
值,则它们不相等

这可能看起来很奇怪,但是如果你认为这两个对象如果被保存了,就会被数据库分配两个不同的<代码> ID <代码>值,这是有意义的。因此,在分配ActiveRecord模型对象的

id
之前,它无法与另一个对象进行有意义的比较

  1) SessionsController#new should eq #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
     Failure/Error: it { expect(assigns(:user)).to eq user }

       expected: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
            got: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>

       (compared using ==)

       Diff:
     # ./spec/controllers/sessions_controller_spec.rb:8:in `block (3 levels) in <top (required)>'

  2) SessionsController#new should eq #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
     Failure/Error: it { expect(assigns(:user)).to eq User.new }

       expected: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
            got: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>

       (compared using ==)

       Diff:
     # ./spec/controllers/sessions_controller_spec.rb:10:in `block (3 levels) in <top (required)>'

  3) SessionsController#new should assign stubbed user
     Failure/Error: assigns(:user).should eq user

       expected: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>
            got: #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil>

       (compared using ==)

       Diff:
     # ./spec/controllers/sessions_controller_spec.rb:13:in `block (3 levels) in <top (required)>'