В нашем приложении есть простой пример для тестирования индекса в контроллере rfq (rails 3.1.0), это:
it "should be successful" do
get 'index'
response.should be_success
end
, мы только что обнаружили, что случай не выполнен из-за ошибки в index.html.эрб (это прошло раньше, хотя).Строка кода:
<% @rfqs.each do |r| %>
<td><%= r.customer.short_name %></td>
<% end %>
Ошибка:
1) RfqsController 'index' should be successful
Failure/Error: get 'index'
ActionView::Template::Error:
undefined method short_name' for nil:NilClass
# ./app/views/rfqs/index.html.erb:28:inblock in _app_views_rfqs_index_html_erb__624673492_53806644'
# c:in each'
# c:ineach'
# ./app/views/rfqs/index.html.erb:18:in _app_views_rfqs_index_html_erb__624673492_53806644'
# ./spec/controllers/rfqs_controller_spec.rb:16:inblock (3 levels) in '
Однако у приложения нет проблем с отображением краткого имени на странице индекса.Также в консоли rails r.customer.short_name вернул короткое имя из таблицы клиентов.
В модели rfq он имеет ассоциацию:
belongs_to :customer
Случай прошел бы, если строкакод становится: r.customer_id, а не r.customer.short_name.Есть мысли по поводу проблемы?Спасибо.
ОБНОВЛЕНИЕ: проблема найдена.Это вызвано нежелательной записью в тестовой базе данных.После очистки тестовой БД проблема исчезла.