Ruby on rails Rspec在“上失败”&书信电报;ActiveRecord>;。无或<;ActiveRecord>;。字段是否为空?”;当应用程序工作时

Ruby on rails Rspec在“上失败”&书信电报;ActiveRecord>;。无或<;ActiveRecord>;。字段是否为空?”;当应用程序工作时,ruby-on-rails,activerecord,rspec,tdd,conditional-statements,Ruby On Rails,Activerecord,Rspec,Tdd,Conditional Statements,从Rspec开始我的TDD之旅,遇到了一些问题。 无法理解为什么我的rspec在以下情况下失败。。。或条件 def director @movie = Movie.find_by_id(params[:id]) if @movie.nil? or @movie.director.empty? flash[:notice] = "The movie has no director info" redirect_to movies_path els

从Rspec开始我的TDD之旅,遇到了一些问题。 无法理解为什么我的rspec在以下情况下失败。。。或条件

  def director
    @movie = Movie.find_by_id(params[:id])
    if @movie.nil? or @movie.director.empty?
      flash[:notice] = "The movie has no director info"
      redirect_to movies_path
    else
      # success
    end
  end  
Rspec测试:

before ... #stubs
it 'assigns movies array in director action' do
    Movie.stub(:find_by_id).and_return(@movie)
    get "director", :id => 1
    ... 
end
错误:

  1) MoviesController assigns movies array in director action
     Failure/Error: get "director", :id => 1
     NoMethodError:
       You have a nil object when you didn't expect it!
       You might have expected an instance of Array.
       The error occurred while evaluating nil.empty?
如果未找到记录,则@movie.nil?应该满足条件并且@movie.director.empty?不应该对其进行评估;对吗

在这种情况下,我不在乎是否没有这样的记录,或者请求记录的director字段是空的,我以同样的方式处理它

谢谢你的帮助


更新

我在模型中删除了一些控制器内容,如下所示:

控制器:

  def director
    @movies = Movie.same_director_by_id(params[:id])
    if @movies.blank?
      redirect_to movies_path
    end
  end
电影:

  def self.same_director_by_id (id)
    movie = self.find_by_id(id)
    if movie.nil? or movie.director.blank?
      return []
    else
      return self.where("id != ?", id).find_all_by_director(movie.director)
    end
  end
rspec:

it 'assigns movies array in director action' do
    Movie.should_receive(:same_director_by_id).and_return([@movie])
    get "director", :id => 1
    assigns(:movies).should be_kind_of(Array)
end
现在所有控制器规格都通过了。 我将分别测试模型

更新2:

问题是我打了个短粗的字:导演在模特身上,而不是在模拟身上!
aReading是正确的。

如评论中所述,必须模拟/存根每个对象/方法<代码>目录在这里丢失。

我想你没有把
主管
重新放回原版。我试着在模型上打短文:导演,机器人,而不是模仿!你是对的。请回答这个问题,我会接受的。