Поскольку вы не показали, как определяются response_body_json
и Presenter#page
, я не могу точно ответить, почему ваша текущая попытка не работает.
Однако я могу вместо этого сказать, что использовал быдругой подход.
Существует два стандартных способа написания таких тестов:
- Время замораживания .
Предполагая, что вы 'Если вы используете относительно современную версию рельсов, вы можете использовать ActiveSupport::Testing::TimeHelpers#freeze_time
где-нибудь в тесте, например что-то вроде:
around do |example|
freeze_time { example.run }
end
it 'should return the movie_1 in page format' do
expect(response_body_json).to eql(Presenter.new(ActiveRecordObject).page)
end
Если вы старшеВерсия rails, вам может понадобиться использовать travel_to(Time.zone.now)
.
И если вы используете очень старую версию rails (или проект не-rails!), в котором нет этой вспомогательной библиотеки, вывместо этого можно использовать timecop
.
Используйте нечеткое сопоставление для меток времени (например,
be_within
).Что-то вроде:
.
it 'should return the movie_1 in page format' do
expected_json = Presenter.new(ActiveRecordObject).page
expect(response_body_json).to match(
expected_json.merge(updated_at: be_within(3.seconds).of(Time.zone.now))
)
end