RSpec和Factory用于测试下一个,prev记录

我有一个User模型,它有下一个和上一个用户的方法:

def next_user User.where("id > ?", id).order("id ASC").first end def prev_user User.where("id < ?", id).order("id DESC").first end 

我正在尝试使用RSpec和Factory girl设置测试来测试这个,并且我不确定这个方法 – 我只是开始使用TDD。

我正在尝试这个:

 describe "previous_next" do let(:user) { FactoryGirl.create(:user) } let(:next_user) { FactoryGirl.create(:user) } it "should know the next user" do expect(user.next_user).to eq next_user end it "should know the previous user" do expect(next_user.prev_user).to eq user end end 

这是错误

 1) User previous_next should know the next user Failure/Error: expect(user.next_user).to eq next_user expected: # got: nil (compared using ==) # ./spec/models/user_spec.rb:93:in `block (3 levels) in ' 2) User previous_next should know the previous user Failure/Error: expect(next_user.prev_user).to eq user expected: # got: nil (compared using ==) # ./spec/models/user_spec.rb:97:in `block (3 levels) in ' 

如果我将next_user记录创建为:user Factory的实例,为什么它会变为nil?

问题是,懒惰评估,它不会创建记录,直到你要求它们。

使用let! 而不是let 。 热切地评估它们并强制在测试之前创建记录。