2016-07-18 6 views
0

Dies ist die .spec Datei:RAILS & RSpec: erwartet < "similar_movies"> aber Rendering mit <[]>

describe MoviesController do 
    describe 'similar_movies' do 
     before :each do 
      @fake_results = [double('movie1'), double('movie2')] 
     end 
     it 'should call the model method that searches similar movies' do 
      expect(Movie).to receive(:similar_movies).with("1"). 
      and_return @fake_results 
      get :similar_movies, :id => 1 
     end 
     it 'should select the similar_movies template for rendering' do 
      Movie.stub(:similar_movies).and_return(@fake_results) 
      expect(response).to render_template(:similar_movies) 
      get :similar_movies, :id => 1 
     end 
     # it 'should make the similar_movies results avaliable to that template'do 

     # end 
    end 

Dies ist die Controller-Aktion:

# METHOD TO FIND MOVIES WITH THE SAME DIRECTOR AS A GIVEN ONE 
    def similar_movies 
    @similar_movies_arr = Movie.similar_movies(params[:id]) 
    #render 'similar_movies' 
    end 

Dies ist das Modell-Methode:

def self.similar_movies(id) 
    movie = Movie.find(id) 
    director = movie['director'] 
    @similar_movies_arr = [] 
    @similar_movies = Movie.where(["director = ?", "#{director}"]) 
    @similar_movies.each do |m| 
     @similar_movies_arr << m 
    end 
    return @similar_movies_arr 
    end 

Und Die Vorlage:

[email protected]_movies_arr.each do |movie| 
    %h1= movie.title 

Es ist sehr einfach, meine ersten Schritte mit RSpec, aber es schlägt fehl. Bitte, kann mir jemand helfen, diesen Fehler zu verstehen

Antwort

0

Das Hauptproblem ist, dass Sie das Get tun müssen, bevor Sie erwarten, Vorlage zu rendern.

Ihr Test wird immer noch Probleme haben, weil Sie keine gefälschten Filme zu suchen haben, die Sie auf das Direktorfeld zugreifen können. Vielleicht möchten Sie sich Fabriken ansehen, um einige Testfilme zu erstellen.

Der dritte Kommentar ist, dass Sie von der Nutzung des Movie.stub in das neue Format von erlauben wechseln möchten (Film) .to zu erhalten ... wie früher die erwarten nur Schalt mit der für

+0

Dank erwarten lassen ein Menge. Es funktionierte, indem Sie nur die Zeile "get ..." verschoben haben, aber auch Ihren anderen Ratschlägen folgen. – siderio2