Контроллер тестирования - запись не найдена при использовании команды find с include - PullRequest
0 голосов
/ 19 мая 2011

Я тестирую действие контроллера, которое использует include в операторе find.Он вызывает 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 Ответ

2 голосов
/ 19 мая 2011

Вы заглушаете :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 }
...