我正在测试在find语句中使用includes的控制器操作。它在测试运行时引发RecordNotFound。我错过了什么吗?我应该如何处理这类事情的测试?
控制器:
def show
@forum_sub_topic = ForumSubTopic.includes(:forum_posts => [:post_replies]).find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @forum_sub_topic }
end
end
测试:
it 'renders show template' do
ForumSubTopic.stub(:find).with("37") { mock_forum_sub_topic }
get :show, :id => "37"
response.should render_template('show')
ebd
答案 0 :(得分:2)
您在:find
上隐藏ForumSubTopic
,但您的控制器正在.find
对象而不是ActiveRecord::Relation
模型上调用ForumSubTopic
。
如果您对with("37")
部分不太在意(因为我不确定是否可以这样做),RSpec提供了一个适合您的stub_chain
方法:
ForumSubTopic.stub_chain(:includes, :find) { mock_forum_sub_topic }
否则,您可以将多个存根放在:
中ForumSubTopic.stub(:includes) { ForumSubTopic }
ForumSubTopic.stub(:find).with("37") { mock_forum_sub_topic }