我在User模型上实现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
谢谢!
答案 0 :(得分:1)
我担心你不能以这种方式使用expect
。尝试这样的事情:
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.stub :now, some_date do
get :index
assert_equal(some_date, user.last_active_at)
end
end
我现在无法自己查看,但请试一试!
祝你好运!答案 1 :(得分:0)
我通过安装gem mocha终于设法存根(在这种情况下比模拟更有趣),我的测试现在看起来像这样:
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.stubs(:now).returns(some_date)
get :index
user.reload
assert_equal(some_date, user.last_active_at)
end
对我来说很好。
答案 2 :(得分:0)
这是最小的,但对于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