2016-04-03 5 views
0

Modell: payment.rbKann nicht Modell Erhalten Rspec mit Active Beziehung zum Pass

class Payment < ActiveRecord::Base 
    belongs_to :loan 

    def self.previous_payments(id) 
    where(loan_id: id) 
    end 

end 

Alles, was ich bin versucht, ist Test eine Zahlung um sicherzustellen, dass festgestellt wird, ob es die richtigen loan_id

hat

Test:

describe '#self.previous_payments' do 
    let(:loan) {Loan.create!(id: 1, funded_amount: 1000.0)} 
    let(:payment_one) {Payment.create!(amount: 100.0, loan_id: 1)} 
    let(:payment_test) {Payment.previous_payments(1)} 

    it 'retrieves all the payments made for a specific loan' do 
    expect(payment_test.first.loan_id).to eql(1) 
    end 
end 

Aber ich halte diesen Fehler:

expected: 1 
got: #<ActiveRecord::Relation []> 

Und es sieht so aus [] bedeutet, dass keine Datensätze gefunden wurden?

Jede Hilfe würde sehr geschätzt werden!

Antwort

1

Rspecs let Syntax ist faul, was bedeutet, dass loan und payment_one nicht existieren, bis sie explizit in Ihrem Test aufgerufen werden. Da payment_test keine expliziten Aufrufe an loan oder payment_one ausführt, gibt es eine leere Beziehung zurück. Wenn Sie let! verwenden, wird Ihre Variablen nicht träge geladen werden:

let!(:loan) {Loan.create!(id: 1, funded_amount: 1000.0)} 
let!(:payment_one) {Payment.create!(amount: 100.0, loan_id: 1)} 

Sie auch so etwas wie

loan.reload 
payment_one.reload 
expect(payment_test.first.loan_id).to eql(1) 

im Test tun könnte zu zwingen loan und payment_one zu laden.

+0

Ahhh danke eine Tonne james00794! Perfekt gearbeitet. Hätte nie gedacht, "lass!" Statt "lass" zu setzen. – user3007294

Verwandte Themen