У меня есть следующий очень простой тест, который всегда проходил.
test "should get index" do
sign_in @user
get companies_url
assert_response :success
end
Однако сейчас я получаю следующую ошибку.
Error:
CompaniesControllerTest#test_should_get_index:
ActionView::Template::Error: No route matches {:action=>"show", :controller=>"companies", :id=>nil}, missing required keys: [:id]
app/views/layouts/application.html.erb:53:in `_app_views_layouts_application_html_erb__2582383126246718868_70101260952060'
test/controllers/companies_controller_test.rb:16:in `block in <class:CompaniesControllerTest>'
Что я изменил в своем приложении, так это то, что я построил боковую панель (которую я загружаю через application.html.erb
, поэтому она загружается во все представления (новый, показ, редактирование), что позволяетпользователь переключается между различными компаниями, которые им «принадлежат» - это меняет переменную сеанса, которую мы используем для изменения содержимого боковой панели.
Если мы копаемся в строке, которая, похоже, дает сбой app/views/layouts/application.html.erb:53
, вот как этовыглядит:
<div class="list-group-item">
<%= link_to 'Company', company_path(session[:current_company]) unless current_user.companies.empty? %>
</div>
Если я уберу эту строку link_to
, то тесты пройдут.
Я предполагаю, что представление представления пытается загрузить, включая боковую панель, которая не имеетsession[:current_company]
установлен таким образом, что представление падает. Однако в Rails 5.2 вы не можете устанавливать / тестировать переменные сеанса, насколько я понимаю, поэтому мне интересно, как лучше настроить тестирование, чтобы пройти этот этап? Iустановите значение для этого сеанса в моем application controller
, хотя пользователь входит в систему:
def after_sign_in_path_for(resource_or_scope)
# Set a default current company scope for a use after signing in
session[:current_company] = current_user.companies.first.id unless current_user.companies.empty?
companies_path
end
Возможно, в link_to
из боковой панели я мог бы добавить значение по умолчанию, чтобы убедиться, что мывсегда отправляю в компанию, независимо от тогоэфир это session[:current_company]
или нет?
Я действительно застрял на этом - благодарен за любую помощь!Спасибо!