Saya menggunakan Ruby on Rails 4 dan permata rspec-rails 2.14. Untuk objek saya, saya ingin membandingkan waktu saat ini dengan updated_at
atribut objek setelah tindakan pengontrol dijalankan, tetapi saya dalam masalah karena spesifikasi tidak lulus. Artinya, yang diberikan berikut ini adalah kode speknya:
it "updates updated_at attribute" do
Timecop.freeze
patch :update
@article.reload
expect(@article.updated_at).to eq(Time.now)
end
Ketika saya menjalankan spesifikasi di atas, saya mendapatkan kesalahan berikut:
Failure/Error: expect(@article.updated_at).to eq(Time.now)
expected: 2013-12-05 14:42:20 UTC
got: Thu, 05 Dec 2013 08:42:20 CST -06:00
(compared using ==)
Bagaimana saya bisa membuat spesifikasi lulus?
Catatan : Saya juga mencoba yang berikut (perhatikan utc
tambahannya):
it "updates updated_at attribute" do
Timecop.freeze
patch :update
@article.reload
expect(@article.updated_at.utc).to eq(Time.now)
end
tetapi spesifikasi masih tidak lulus (perhatikan perbedaan nilai "dapatkan"):
Failure/Error: expect(@article.updated_at.utc).to eq(Time.now)
expected: 2013-12-05 14:42:20 UTC
got: 2013-12-05 14:42:20 UTC
(compared using ==)
===
alih-alih ==
- saat ini Anda membandingkan object_id dari dua objek Waktu yang berbeda. Meskipun Timecop tidak akan membekukan waktu server database. . . jadi jika cap waktu Anda dibuat oleh RDBMS, itu tidak akan berfungsi (saya harap itu tidak menjadi masalah bagi Anda di sini)
===
, tapi itu mungkin menderita karena melewati batas kedua. Mungkin yang terbaik adalah menemukan atau menulis matcher Anda sendiri, di mana Anda mengubahnya menjadi epoch detik dan membiarkan perbedaan absolut kecil.