如何在不使用 sleep(1.second) 方法的情况下编写规范?当我取消 sleep 时,我的测试会因为返回相同的时间戳而中断吗?
我有以下类方法:
def skip
qs = find_or_create_by(user_id: user_id)
qs.set_updated_at
qs.n_skip += 1
qs.save!
end
和以下规范:
qs = skip(user.id)
sleep(1.second)
qs2 = skip(user.id)
qs.should_not be_nil
qs2.should_not be_nil
(qs.updated_at < qs2.updated_at).should be_true
最佳答案
我用过 Timecop gem 过去用于进行基于时间的测试。
require 'timecop'
require 'test/unit'
class MyTestCase < Test::Unit::TestCase
def test_mortgage_due_in_30_days
john = User.find(1)
john.sign_mortgage!
assert !john.mortgage_payment_due?
Timecop.travel(Time.now + 30.days) do
assert john.mortgage_payment_due?
end
end
end
因此您的示例可能如下所示:
qs = skip(user.id)
Timecop.travel(Time.now + 1.minute) do
qs2 = skip(user.id)
end
qs.should_not be_nil
qs2.should_not be_nil
(qs.updated_at < qs2.updated_at).should be_true
关于ruby - 我如何在不使用 ruby 中的 sleep() 的情况下 rspec/test 一个 updated_at 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905108/