2016-11-18 1 views
1

하나의 버튼을 클릭하여 한 디렉터에 속한 모든 영화 정보를 반환하는 기능을 추가하고 싶습니다. 구현되고 잘 작동하지만 Rspec 테스트를 작성할 때 약간의 오류가 발생합니다. 경로를 찾지의Rspec 오류와 일치하는 경로가 없습니다.

(1)MoviesController searching for movies by the same director when 'Director' info exists should post @director and @movies variables for view 
Failure/Error: get :find_movies_by_same_director, :movie_id => @movie.id, :movie_director => @movie.director 

ActionController::RoutingError: 
    No route matches {:movie_id=>"1", :movie_director=>["Star Wars", "THX-1138"], :controller=>"movies", :action=>"find_movies_by_same_director"} 

# ./spec/controllers/movie_controller_spec.rb:15:in `block (4 levels) in <top (required)>' 

유사 오류가 다음의 모든 시험 발생, 그래서 난 내 루트 파일에 대한 몇 가지 문제가있을 수 있습니다 생각 : 오류 메시지입니다.

get '/movies/:id/director', to: 'movies#find_movies_by_same_director', as: 'director' 

그리고 RSpec에 파일입니다 :

require "spec_helper" 

describe MoviesController do 
it { should respond_to(:find_movies_by_same_director) } 

describe "searching for movies by the same director" do 
    context "when 'Director' info exists" do 
    before do 
     @movie = double(:title => "Star Wars", :id => "1", :director => "George Lucas") 
     Movie.stub(:find).with("1").and_return @movie 
     @lucas_films = ["Star Wars", "THX-1138"] 
     @movie.stub(:director).and_return @lucas_films 
    end 
    it "should post @director and @movies variables for view" do 
     get :find_movies_by_same_director, :movie_id => @movie.id 
     assigns(:director).should == @movie.director 
     assigns(:movies).should == @lucas_films 
    end 
    end 
end 

컨트롤러 방법입니다 : 여기 routes.rb에서 지정한 경로는

def find_movies_by_same_director 
    @movie = Movie.find(params[:id]) 
    @director = @movie.director 
    if (not @director.nil?) and (not @director.empty?) 
    @movies = Movie.where(director: @director) if (not @director.nil?) and (not @director.empty?); 
    #@movies = Movie.find_by_sql("SELECT * FROM movies i WHERE i.director == '#{@director}'") 
    render :director 
    else 
    flash[:notice] = "'#{@movie.title}' has no director info" 
    redirect_to root_path 
end 

난 그냥 RSpec을 배우고 시작 그래서 모든 의견이나 제안을 부탁드립니다.

답변

1

경로에서 볼 수 있듯이 조치에는 매개 변수 :id이 필요합니다. 대신 :movie_id을 전달 중입니다. 그래서, 단지

get :find_movies_by_same_director, :id => @movie.id 

와 사양

get :find_movies_by_same_director, :movie_id => @movie.id 

이 라인을 교체하고 다시 시도하십시오.

관련 문제