Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果不在ruby中使用sleep(),我将如何在字段中rspec/测试更新的_?_Ruby_Rspec - Fatal编程技术网

如果不在ruby中使用sleep(),我将如何在字段中rspec/测试更新的_?

如果不在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

如何在不使用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_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