Использование 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 %>
В любом случае, я должен иметь такой код на тот случай, если в результате действия моего контроллера ничего не будет возвращено.
Так что, как оказалось, это было что-то глупое, что я делал.