如果不在ruby中使用sleep(),我将如何在字段中rspec/测试更新的_?
如何在不使用sleep(1.s)方法的情况下编写规范?当我移除睡眠时,我的测试中断,因为它们返回相同的时间戳 我有以下的类方法:如果不在ruby中使用sleep(),我将如何在字段中rspec/测试更新的_?,ruby,rspec,Ruby,Rspec,如何在不使用sleep(1.s)方法的情况下编写规范?当我移除睡眠时,我的测试中断,因为它们返回相同的时间戳 我有以下的类方法: 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
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
qs=skip(user.id)
睡眠(1秒)
qs2=跳过(user.id)
Q.不应该是零
qs2.不应该是零
(qs.updated_at
我过去使用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
需要“timecop”
需要“测试/单元”
类MyTestCase
因此,您的示例可能如下所示:
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
qs=skip(user.id)
Timecop.travel(Time.now+1.minute)做什么
qs2=跳过(user.id)
结束
Q.不应该是零
qs2.不应该是零
(qs.updated_at
这也适用于rspec测试。在您的文件中:
require 'timecop', group: :test
然后,例如,您可以使用rspec测试一个命名范围,该范围以降序更新的顺序获取名为querys的模型:
require 'timecop'
require 'spec_helper'
describe Query do
# test the named scopes for ordering and searching
describe 'when a query is searched or sorted' do
before :each do
@query1 = create(:query)
Timecop.travel(Time.now + 1.minute) do
@query2 = create(:query)
end
Timecop.travel(Time.now + 2.minute) do
@query3 = create(:query)
end
end
it 'should be listed in descending updated_at order' do
@queries = Query.order_by_latest
@queries.first.should == @query3
@queries.last.should == @query1
end
end
end
你的set_updated_at方法做什么?我不认为您真的是这样测试skip方法,要测试skip方法,您必须验证skip方法:1:使用给定数据调用find_或create_by,2:调用set_updated_at对象,3:递增n_skip 1和4:保存qs对象。您现在测试的是set_updated_at在另一个方法的测试中设置正确的updated_at timestamp