Ruby on rails Rspec在“上失败”&书信电报;ActiveRecord>;。无或<;ActiveRecord>;。字段是否为空?”;当应用程序工作时
从Rspec开始我的TDD之旅,遇到了一些问题。 无法理解为什么我的rspec在以下情况下失败。。。或条件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
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是正确的。如评论中所述,必须模拟/存根每个对象/方法<代码>目录在这里丢失。我想你没有把
主管
重新放回原版。我试着在模型上打短文:导演,机器人,而不是模仿!你是对的。请回答这个问题,我会接受的。