Использование Mocha в функциональном тесте и получение ActionView::Template::Error: неопределенный метод `model_name'для NilClass:Class

У меня есть очень простое действие контроллера, которое загружает переменную экземпляра, используя вызов для ограничения следующим образом:

  def index
    @questions = Question.limit(10)
  end

У меня есть очень простой функциональный тест с использованием musta, test / unit и Mocha.

  should 'limit questions returned' do
    Question.expects(:limit)    
    get :index
  end

Я получаю следующую ошибку только тогда, когда проверяю макет. До этого момента все работало в браузере и во всех других моих тестах. Если я поставлю фиктивный вызов после вызова get:index, он потерпит неудачу, как я и ожидал.

test: WelcomeController should limit questions returned. (WelcomeControllerTest):ActionView::Template::Error: undefined method `model_name' for NilClass:Class
app/views/welcome/index.html.erb:7:in `_app_views_welcome_index_html_erb__4244593822102250638_70180558144100'
test/functional/welcome_controller_test.rb:14:in `block in <class:WelcomeControllerTest>'

Как я уже заметил. Все работает через мои интеграционные тесты, и я вижу все это в браузере. Я получаю сообщение об ошибке только при вводе строки "Question.expected (:limit)". Я надеюсь, что это просто глупость, по которой я скучаю. Любая помощь будет оценена.

1 ответ

Решение

Мне удалось это исправить, изменив код моего представления из этого:

    <%= render @questions %>

<% if @questions.count >= 10 %>
    <h3><%= link_to 'See more ->', questions_path %></h3>
<% end %>

к этому:

<% if @questions %>
<%= render @questions %>

<% if @questions.count >= 10 %>
    <h3><%= link_to 'See more ->', questions_path %></h3>
<% end %>
<% end %>

В любом случае, я должен иметь такой код на тот случай, если в результате действия моего контроллера ничего не будет возвращено.

Так что, как оказалось, это было что-то глупое, что я делал.

Другие вопросы по тегам