Неудачный тест рельсов, основанный на отсутствии установленной переменной сеанса - как установить в Rails 5.2? - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть следующий очень простой тест, который всегда проходил.

  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] или нет?

Я действительно застрял на этом - благодарен за любую помощь!Спасибо!

1 Ответ

0 голосов
/ 24 ноября 2018

Изменение строки, чтобы пропустить создание ссылки, если отсутствует переменная сеанса

<%= link_to 'Company', company_path(session[:current_company]) unless current_user.companies.empty? || !session[:current_company] %>

Похоже, что все получилось, и все тесты прошли успешно.Хотелось бы получить отзыв о том, является ли это хорошим решением или нет!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...