RSpec gagal saat membandingkan ActiveRecord::Relation yang kosong

Saya sedang menguji pengontrol saya dan melakukan sesuatu seperti ini:

bar = SuperDuper.calculate(resource)
expect(assigns(:foo)).to eq(bar)

Saya mendapatkan ini sebagai hasilnya

expected: #<ActiveRecord::Relation []>
     got: #<ActiveRecord::Relation []>

(compared using ==)

Mengapa RSpec menganggap ini sebagai kegagalan?

Seperti yang Anda lihat, saya menggunakan eq yang mengabaikan identitas objek, bukan equal yang membandingkan identitas objek.


person Mohamed Anwer    schedule 23.08.2016    source sumber
comment
mungkin rspec menegaskan kesetaraan objek melalui tautan. Jadi Anda memiliki 2 objek identik tetapi keduanya menunjuk ke area berbeda di memori. Pertimbangkan untuk membandingkan berdasarkan nilai, bukan hanya membandingkan objek   -  person tmn4jq    schedule 23.08.2016
comment
@tmn4jq Di sini saya menggunakan eq yang membandingkan nilai, bukan menggunakan equal yang membandingkan identitas objek   -  person Mohamed Anwer    schedule 23.08.2016
comment
Debug dengan expect(assigns(:foo).to_a).to eq(bar.to_a) atau expect(assigns(:foo).to_sql).to eq(bar.to_sql).   -  person Dave Schweisguth    schedule 24.08.2016


Jawaban (1)


Saya tidak yakin, tapi Anda eq berarti ==. Bukti: https://www.relishapp.com/rspec/rspec-expectations/v/2-0/docs/matchers/equality-matchers

Perhatikan juga ini: a.eql?(b) # object equivalence - a and b have the same value

Itu dari sini: Rspec `eq` vs `eql` dalam pengujian `expect`

Jadi, saya yakin Anda harus mencoba pencocokan eql.

person tmn4jq    schedule 23.08.2016
comment
Saya dapat ini: expected: #<ActiveRecord::Relation []> got: #<ActiveRecord::Relation []> (compared using eql?) - person Mohamed Anwer; 23.08.2016
comment
@MohamedAnwer pertimbangkan untuk membaca ini: stackoverflow.com/questions/26482564/, relishapp.com/rspec/rspec-rails/docs/matchers/ dan stackoverflow.com/questions/26935630/ - person tmn4jq; 23.08.2016