2016-04-12 4 views
0

Modell:Wie testet man die parametrisierte Scope-Methode mit rspec (v3.4.1) in Rails (v4.2.5)?

scope :recent, ->(n) {where(:created_at => 6.months.ago..Time.now).order('created_at DESC').limit(n)} 

Ich würde in Rspec so etwas tun:

before(:each) do 
    @song = double(Song,id: 1, name: "Vegan artisan.", album_id: 1, artist_id: 20, created_at: "2016-03-04 13:15:36", updated_at: "2016-03-04 13:15:36") 
end    
it "should return the recent most songs within range" do 
    Song.stub_chain(:where,:order,:limit).with(created_at:6.months.ago..Time.now).with('created_at DESC').with(2).and_return([@song,@song]) 
    Song.recent.should == [@song,@song] 
end 

Der obige Fall versagt, die unten genannten Fehler geben:

ArgumentError: 
    wrong number of arguments (0 for 1) 

ich verschiedene Ansätze ausprobiert , aber immer noch Glück. Jede Hilfe dazu wäre willkommen. Danke im Voraus!!

Antwort

0

recent Umfang erfordert, dass Sie einen Parameter zu übergeben, die das Suchergebnis begrenzt, so müssen Sie diese Zeile in geeigneter Weise ändern:

Song.recent(2).should eq([@song,@song]) 

oder

expect(Song.recent(2)).to match_array([@song,@song]) 
+0

Vielen Dank für die schnelle Antwort. Es hat mein Problem gelöst. –