测试控制器 - 使用find with includes时找不到记录

时间:2011-05-19 04:52:16

标签: ruby-on-rails testing include rspec

我正在测试在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

1 个答案:

答案 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 }