ruby-on-rails 如何比较做测试的日期?

xytpbqjk  于 2023-02-01  发布在  Ruby
关注(0)|答案(1)|浏览(186)

为什么我的测试比较时间有时会失败?我该如何改进这个测试?

data = {  init: Time.zone.now, end: Time.zone.tomorrow }
        put "/api/...", params: data,
            
expect(JSON.parse(response.body)['time'].to_time).to be_within(2.seconds).of(Time.zone.now)

我想解决这个问题以通过所有的测试

eh57zj3b

eh57zj3b1#

ActiveSupport::Testing::TimeHelpers为这类测试提供了有用的帮助,它们将允许您“冻结”Ruby运行时的当前时间,以避免使用任何类似be_within(2.seconds)的技巧,并防止测试中出现任何问题。
您的测试如下所示:

travel_to(Time.now) # Freeze Ruby time

# Plan your task...

expect(task['time'].to_time).to eq(Time.now)

travel_back         # Unfreeze Ruby time

我还建议将日期作为整数进行比较,以防止任何时区问题:
expect(task['time'].to_i).to eq(Time.now.to_i)

相关问题