0
我有一个简单的模型,其中付款属于贷款。我正在使用rspec和shoulda-matcher来测试验证。然而,我仍然收到错误指出未完成的余额 - 表明这是一个未定义的方法为零类。但是当我在rails控制台中使用模型时,此验证正在工作。任何人都知道为什么它没有通过测试?Rsepc验证测试与自定义验证:未定义的方法和零类错误
谢谢。
class Payment < ActiveRecord::Base
belongs_to :loan
validates_presence_of :loan_id
validate :proper_amount
private
def proper_amount
errors.add(:amount, "proper") if amount > loan.outstanding_balance
end
end
FactoryGirl.define do
factory :payment do
loan
amount 100.0
post_at Date.today
end
end
FactoryGirl.define do
factory :loan do
funded_amount 5000.0
end
end
RSpec.describe Payment do
before (:all) do
@loan = FactoryGirl.create(:loan)
@payment = FactoryGirl.create(:payment, loan: @loan)
end
describe 'ActiveModel validations' do
#basic validations on attributes
it { should validate_presence_of(:loan_id) }
end
end
Failure/Error: it { should validate_presence_of(:amount) }
NoMethodError:
undefined method `outstanding_balance' for nil:NilClass
谢谢!我做了你所说的并有同样的错误......有什么想法? – LOCKLOCK
你的factory_girl装载和付款定义是什么?也许给'let!'和'subject!'添加解释标记,这样RSpec不会创建它们懒惰地 –
嗨,谢谢你的回应。我在我的工厂女孩代码中添加了。工厂在其他测试中工作正常。我试图检查工厂女孩实例变量,输出也很好。你是什么意思添加解释标记? – LOCKLOCK