Определение объема RSpec + Capybara дает неожиданные результаты - PullRequest
0 голосов
/ 10 июня 2018

У меня есть две таблицы: предложения и ключевые слова.Я пытаюсь проверить удаление элементов из ключевых слов (что автоматически помещает их в предложения).

Вот мой тест:

it "removes a chosen keyword" do
  page.first(:link, "Add").click
  within(:css, "#keywords") do
    find('li:nth-child(1)').click_link('X')
    expect(page).to have_no_content(item.search.term)
  end
end

Результат:

  1) New collection Suggestions removes a chosen keyword
     Failure/Error: expect(page).to have_no_content(item.search.term)
       expected not to find text "Gift for her" in "Keywords\nGift for her X"
     # ./spec/features/collections_spec.rb:60:in `block (4 levels) in <top (required)>'
     # ./spec/features/collections_spec.rb:53:in `block (3 levels) in <top (required)>'

Вот распечатка элемента body:

  <div class="col-lg-5 col-md-6 mb-4" id="suggestions">
    <div class="card h-100">
      <div class="card-body">
        <h4 class="card-title">Suggestions</h4>
        <p class="card-text"> 
          <ul class="list-group list-group-flush" id="suggestion-list">
                <li class="list-group-item">
                  Gift for her
                  <a class="btn btn-primary" rel="nofollow" data-method="post" href="/collections/1/item/choose.1">Add</a><a class="btn btn-primary" rel="nofollow" data-method="post" href="/collections/1/item/destroy.1">X</a><br>
                </li>
          </ul>
        </p>
      </div>
    </div>
  </div>

<div class="col-lg-5 col-md-6 mb-4" id="keywords">
    <div class="card h-100">
      <div class="card-body">
        <h4 class="card-title">Keywords</h4>
        <p class="card-text">                     
          <ul class="list-group list-group-flush" id="keyword-list">
          </ul>
        </p>
      </div>
    </div>
  </div>

И мой show.html.erb файл:

  <div class="col-lg-5 col-md-6 mb-4" id="suggestions">
    <div class="card h-100">
      <div class="card-body">
        <h4 class="card-title">Suggestions</h4>
        <p class="card-text"> 
          <ul class="list-group list-group-flush" id="suggestion-list">
            <% if @suggestions %>
                <% @suggestions.each do |s| %>
                <li class="list-group-item">
                  <%= Hpricot.uxs s.search.term %>
                  <%= link_to 'Add', collection_item_choose_path(@collection, s),{  method: :post, class: "btn btn-primary" } %><%= link_to 'X', collection_item_destroy_path(@collection, s),{  method: :post, class: "btn btn-primary" } %><br>
                </li>
              <% end %>
            <% end %>
          </ul>
        </p>
      </div>
    </div>
  </div>

<div class="col-lg-5 col-md-6 mb-4" id="keywords">
    <div class="card h-100">
      <div class="card-body">
        <h4 class="card-title">Keywords</h4>
        <p class="card-text">                     
          <ul class="list-group list-group-flush" id="keyword-list">
            <% if @keywords %>
              <% @keywords.each do |s| %>
                <li class="list-group-item">
                  <%= Hpricot.uxs s.search.term %>
                  <%= link_to 'X', collection_item_remove_path(@collection, s),{  method: :post, class: "btn btn-primary" } %><br>
                </li>
              <% end %>
            <% end %>
          </ul>
        </p>
      </div>
    </div>
  </div>

Мне кажется, что область видимости отключена, хотя я проверил иссылка действительно щелкает (вы можете увидеть это в путах page.body).Есть идеи?Заранее спасибо!

1 Ответ

0 голосов
/ 10 июня 2018

Это вряд ли проблема с областью видимости, так как сообщаемый текст - «Ключевые слова \ nПодарок для ее X» - тогда как, если бы он видел текст в разделе «предложения», в нем тоже был бы текст «Добавить».

Скорее всего, нажатие на 'X' просто не обрабатывается вашим приложением из-за ошибки где-то.Проверьте свой test.log, чтобы увидеть, какие именно методы вызываются и есть ли ошибки.

Кроме того, вы не упоминаете, какой драйвер вы используете с Capybara.Если вы используете JS-совместимый драйвер, возможно, вы не установили Capybara.default_max_wait_time достаточно высоко для оборудования, на котором вы тестируете, и / или турболинков (при условии, что они есть в вашем приложении).Опять же, взгляд на ваш test.log должен дать лучшее представление о том, что на самом деле происходит.Другой вариант - использовать save_and_open_screenshot, чтобы получить изображение того, как выглядит фактическая страница (при условии, что вы используете драйвер, который его поддерживает)

Если вы не используете драйвер с поддержкой JS (то есть вы используете rack_test), возможно, вам не понадобился capybara/rails и метод ссылок не используется.Опять же, проверка test.log покажет метод (get vs post), используемый для каждого запроса.

...