ruby-on-rails - Minitest ruby​​ 中的模拟或 stub 日期时间

标签 ruby-on-rails ruby datetime mocking minitest

我正在用户模型上实现last_active_at属性,每次用户访问网站上的页面时该属性都会更新。

当尝试使用日期时间上的模拟来测试此属性的设置时,我收到 NoMethodError: undefined method 'expect' for DateTime:Class

这是我在文件chapter_controller_test.rb中的测试:

test "save user last activity timestamp" do
  user = FactoryGirl.create(:user, student_type: User::REMOTE)
  session[:user_id] = user.id
  some_date = DateTime.new(2014, 12, 12, 1, 1, 1)
  DateTime.expect(:now, some_date)
  get :index
  assert_equal(some_date, user.last_active_at)
end

以及ApplicationController中的实现:

before_filter :record_activity

def record_activity
  if current_user && current_user.remote?
    current_user.last_active_at = DateTime.now
    current_user.save
  end
end

我正在使用 minitest 5.1

最佳答案

这是最简单的,但对于 Rails(您的情况),从 4.1 开始您可以使用 travel_to

travel_to Date.new(1986, 10, 25) do
  Date.current == Date.new(1985, 10, 25) # Marty! You've gotta come back with me!
end

关于ruby-on-rails - Minitest ruby​​ 中的模拟或 stub 日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28837711/

相关文章:

ruby-on-rails - Rails 抓取价格

ruby-on-rails - 通过将 Rails 保留在内存中来加快开发过程中的 Rails 测试?

ruby - 如何删除 Ruby 字符串开头和结尾的换行符

ruby - 构建逗号分隔文件

javascript - 如何在 javascript/Node.js 中获取时间?

python - 在python中转换时区的意外结果

java - 使用 Java 8 的给定日期(UTC 日期)和当前日期(以天为单位)之间的差异

ruby-on-rails - 如何使用 Rails 5.1.0 和 jQuery

javascript - 主干.JS : View is not a contructor

ruby-on-rails - 运行 Rails 服务器时找不到 gem 'rails (= 4.2.5) x86-mingw32'