Ruby on Rails 4와 rspec-rails gem 2.14를 사용하고 있습니다. 내 개체의 updated_at
경우 컨트롤러 작업이 실행 된 후 현재 시간을 개체 속성 과 비교하고 싶지만 사양이 통과되지 않아 문제가 있습니다. 즉, 다음은 사양 코드입니다.
it "updates updated_at attribute" do
Timecop.freeze
patch :update
@article.reload
expect(@article.updated_at).to eq(Time.now)
end
위의 사양을 실행하면 다음 오류가 발생합니다.
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 ==)
사양을 통과하려면 어떻게해야합니까?
참고 : 다음도 시도했습니다 ( utc
추가 참고 ).
it "updates updated_at attribute" do
Timecop.freeze
patch :update
@article.reload
expect(@article.updated_at.utc).to eq(Time.now)
end
그러나 사양은 여전히 통과하지 못합니다 ( "값 차이가 있음"에 유의).
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 ==)
===
대신 사용하십시오 ==
-현재 두 개의 다른 Time 객체의 object_id를 비교하고 있습니다. Timecop은 데이터베이스 서버 시간을 고정시키지 않습니다. . . 당신의 타임 스탬프가 그렇지 않은 일 것이다 RDBMS에 의해 생성되는 경우 그래서 (내가 그 기대 여기에 비록 당신을 위해 문제가되지 않습니다)
===
있지만 두 번째 경계를 넘으면 어려움을 겪을 수 있습니다. 아마도 가장 좋은 방법은 epoch 초로 변환하고 작은 절대 차이를 허용하는 자신 만의 matcher를 찾거나 작성하는 것입니다.