ruby - 我如何在不使用 ruby​​ 中的 sleep() 的情况下 rspec/test 一个 updated_at 字段?

标签 ruby rspec

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

相关文章:

ruby-on-rails - Shoulda 和 RSpec 之前

ruby - 将 initialize() args 设置为属性的快捷方式?

ruby-on-rails - Rspec 和 Capybara 未定义的局部变量或方法 `page'

ruby-on-rails - 我如何解决 "Missing host to link to! Please provide the :host parameter"? (返回率)

ruby - 为什么不使用 RVM 安装 Ruby 1.9.2-head?

ruby - 在 ruby​​ rspec 中使用 let 时测试和关闭文件对象

ruby - VoltRB rspec 测试方法无法将 Promise 转换为数组

mysql - Rails - 如何向模型添加时间戳?

ruby-on-rails - 在 Rails ActiveRecord 查询中有条件地链接 where 子句

arrays - 为 RSpec 数组匹配器启用差异