2017-09-26 3 views
0

Ich erstellen RSpec Test unten. Ich versuche mehrmals, subject anzurufen. Aber ich kann das Ergebnis nicht erwarten. Ich rufe dreimal die subject an, nicht wahr? Also, ich erwarte drei Buchrekorde. Kann subject nicht einmal anrufen?So rufen Sie den Betreff mehrmals mit RSpec

require 'rails_helper' 

RSpec.describe Book, type: :model do 
    context 'some context' do 
    subject { Book.create } 

    before do 
     subject 
    end 

    it 'something happen' do 
     subject 
     expect { subject }.to change{ Book.count }.from(0).to(3) 
    end 
    end 
end 

Antwort

0

Nr let und subject sind memoized (and lazy-loaded).

Sie können es ändern, wie diese

subject { 3.times { Book.create } } 

it 'something happen' do 
    expect { subject }.to change{ Book.count }.from(0).to(3) 
end 

Oder wenn Sie (aus irgendeinem Grund) wollen etwas 3-mal nennen - definiert eine Methode:

subject { create_book } 

def create_book 
    Book.create 
end 

before do 
    create_book 
end 

it 'something happen' do 
    create_book 
    expect { subject }.to change{ Book.count }.from(2).to(3) 
end 

Dann wird es 3 mal aufgerufen : einmal vor dem Block, eins davor und einmal innerhalb der Erwartung (aber die Änderung wird von 2 nicht von 0 sein, weil diese 2 mal zuvor aufgerufen wurden)

Verwandte Themen