Как использовать capybara в rspec для перехода по ссылке в панели навигации?

#rspec #capybara #navbar

Вопрос:

У меня есть этот код

 require 'rails_helper'

RSpec.describe 'planets features' do
  describe 'adding a new planet' do
    it 'adds a planet to the list of planets' do
      visit planets_path
      click_link('List your planet')

      expect(current_path).to have_content('/planets/new')

      fill_in('Name', with: 'Test')
      click_button('Publish')

      expect(current_path).to have_content('/planets')
      expect(page).to have_content('Test')

    end
  end
end
 

Это показывает эту ошибку в терминале:

особенности планет добавление новой планеты добавляет планету в список планет Сбой/ошибка: click_link(«Перечислите свою планету»)

  Capybara::ElementNotFound:
   Unable to find link "List your planet"
 
 The link I want to click is in the navbar.
Here is a part of the code in the navbar with the link 'List your planet'.

<div class="navbar navbar-expand-sm navbar-light navbar-lewagon">
  <%= link_to planets_path, class: "navbar-brand" do %>
    <p class="navbar-logo"><i class="fas fa-meteor"></i> PIANETA</p>
    <% end %>

  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>


  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
      <% if user_signed_in? %>

        <%= link_to "List your planet", new_planet_path, class: "btn btn-outline-primary-1 shadow-none focus-none text-decoration-none", type: "button", role: "button" %>
        <%= link_to "My Listings", planets_path, class: "btn btn-outline-primary-1 shadow-none focus-none text-decoration-none", type: "button", role: "button" %>
 

Как мне правильно написать тест, чтобы он нашел ссылку в навигационной панели ?

Ответ №1:

Для меня это выглядит не как ссылка, а как кнопка (в зависимости от имени и типа класса).

Попробуйте click_button('List your planet') вместо этого

Если это не сработает, попробуйте find('.btn', :text => 'List your planet').click

Ответ №2:

на вашей навигационной панели есть фрагмент кода, который отображает «Список вашей планеты» только в том случае, если пользователи вошли в систему.

Ссылка:

 <% if user_signed_in? %>
 

Вам необходимо проинструктировать свой тест для выполнения операции входа в систему, прежде чем вы перейдете по этому URL-адресу.