我的Active Record中有一个self.lookup方法。我想要做的是使用FactoryGirl来测试方法。当我调用类Repurchase.lookup(d,lp)时,它会从数据库种子数据而不是测试数据中提取。
在Repurchase活动记录中:
def self.lookup(division, loan)
end
在我的RSpec代码中:
rr = FactoryGirl.create(:repurchase, pricing_cat_id: nil, loan_id: 1)
puts rr.inspect
d = FactoryGirl.build(:division, id: 1)
lp = FactoryGirl.build(:loan, id: 1, pricing_cat_id: nil)
rv = Repurchase.lookup(d, lp)
#When I call this it goes against the database
#HOW TO DO THIS (rv = Repurchase.lookup(d, lp) against test data)?
rv.pricing_cat_id.should eql(nil)
rr = FactoryGirl.create(:repurchase, pricing_cat_id: 1, loan_id: nil)
puts rr.inspect
lp = FactoryGirl.build(:loan, id: nil, pricing_category_id: 1)
lp.pricing_cat_id.should eql(1)
rv = Repurchase.lookup(d, lp) #HOW TO DO THIS lookup call??
提前谢谢
答案 0 :(得分:2)
我看到你在代码中混合了build
和create
。 create
将创建新对象并将其保存到数据库中; build
创建它但不立即保存它。
因此,您的变量d
和lp
是ActiveRecord对象,它们存在于内存中,但不存在于数据库中。我假设你的Repurchase.lookup
方法使用ActiveRecord调用来查找数据库中正确的东西。因此,对于lookup
可见的新对象,您应该使用create
制作这些对象,或者通过调用save
将它们保存到数据库中。