2016-07-18 17 views
0

渲染这是的.spec文件:钢轨&RSpec的:期待< “similar_movies”>但<[]>

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 

这是控制器动作:

# 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 

这是模型的方法:

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 

而这个模板:

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

这很简单,我的第一步与RSpec,但它失败了。请,有人可以帮助我了解这个错误

MoviesController similar_movies should select the similar_movies template for rendering 
Failure/Error: expect(response).to render_template(:similar_movies) 
    expecting <"similar_movies"> but rendering with <[]> 

回答

0

的主要问题是,你需要期待渲染模板之前做搞定。

get :similar_movies, :id => 1 
    expect(response).to render_template(:similar_movies) 

您的测试仍然存在问题,因为您没有虚假的电影来搜索您可以访问导演字段。你可能想看看工厂创建一些测试电影。

第三种意见是,你可能希望从使用Movie.stub允许(电影)。为了收到的新格式切换......像预期更早只是用开关允许期望

+0

谢谢许多。它只是通过移动'get ...'来实现,但也会遵循你的其他建议。 – siderio2

相关问题