Tôi đang sử dụng Ruby on Rails 4 và gem rspec-rails 2.14. Đối với đối tượng của tôi, tôi muốn so sánh thời gian hiện tại với updated_at
thuộc tính đối tượng sau khi chạy hành động bộ điều khiển, nhưng tôi gặp rắc rối vì thông số kỹ thuật không vượt qua. Đó là, sau đây là mã đặc điểm:
it "updates updated_at attribute" do
Timecop.freeze
patch :update
@article.reload
expect(@article.updated_at).to eq(Time.now)
end
Khi tôi chạy thông số trên, tôi gặp lỗi sau:
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 ==)
Làm cách nào để vượt qua thông số kỹ thuật?
Lưu ý : Tôi cũng đã thử những cách sau (lưu ý phần utc
bổ sung):
it "updates updated_at attribute" do
Timecop.freeze
patch :update
@article.reload
expect(@article.updated_at.utc).to eq(Time.now)
end
nhưng thông số kỹ thuật vẫn không vượt qua (lưu ý sự khác biệt giá trị "got"):
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 ==)
===
thay vì ==
- hiện tại bạn đang so sánh object_id của hai đối tượng Thời gian khác nhau. Mặc dù Timecop sẽ không đóng băng thời gian máy chủ cơ sở dữ liệu. . . vì vậy nếu timestamps của bạn đang được tạo ra bởi các RDBMS nó sẽ không làm việc (Tôi hy vọng đó không phải là một vấn đề đối với bạn ở đây mặc dù)
===
, nhưng điều đó có thể bị vượt qua ranh giới thứ hai. Có lẽ tốt nhất là tìm hoặc viết trình so khớp của riêng bạn, trong đó bạn chuyển đổi thành giây kỷ nguyên và cho phép một sự khác biệt tuyệt đối nhỏ.