Minitest Ruby の DateTime のモックまたはスタブ

概要

User モデルに last_active_at 属性を実装しています。この属性は、ユーザーが Web サイト上のページにアクセスするたびに更新されます。

datetime のモックを使用してこの属性の設定をテストしようとすると、NoMethodError: unknown 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

ミニテスト5.1を使用しています

解決策

これはミニテストですが、レールの場合(あなたの場合)、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