我刚刚开始学习rspec,并且在确定如何测试特定模型方法时遇到了一些麻烦。基本上,我有一个用户可以回复的Thread模型。每当保存对该线程的回复时,运行此方法以更新线程的updated_at
列。
def update_thread_timestamp
Thread.where(id: thread_id).update_all("updated_at" => Time.now)
end
这是我对该方法的rspec测试:
it "#update_thread_timestamp updates the parent thread's updated_at column" do
t = Factory.build(:thread, updated_at: nil)
new_comment = Factory.build(:comment, thread_id: t.id)
expect{new_comment.update_thread_timestamp}.to change{t.updated_at}
end
这里的问题是每当我运行测试时它都会失败,这样:
result should have changed, but is still nil
。 rspec是否存在直接数据库调用的问题?我对此感到茫然。