Я пытаюсь написать тест для вызова AJAX. Функциональность работает в производстве, но у меня проблемы с Capybara. Кажется, что find(".selector").click
не может быть вызван дважды в том же сценарии.Capybara не находит ту же ссылку дважды, используя find
Сценарий № 1 проходит, но сценарий # 2 дает эту ошибку на втором find(".article__expand").click
:
Failure/Error: find(".article__expand").click
Capybara::ElementNotFound:
Unable to find css ".article__expand"
Я использую селектор CSS, потому что тело по ссылке является диапазон glyphicon. Есть ли способ обойти это?
require "rails_helper"
RSpec.feature "Users can toggle article descriptions" do
let(:article) { FactoryGirl.create(:article, description: "Article description") }
context "all users" do
before do
visit article_path(article)
end
scenario "description is hidden until clicked" do
expect(page).to_not have_content("Article description")
find(".article__expand").click
expect(page).to have_content("Article description")
end
scenario "description can be toggled" do
expect(page).to_not have_content("Article description")
find(".article__expand").click
expect(page).to have_content("Article description")
find(".article__expand").click
expect(page).to_not have_content("Article description")
end
end
end
Вот как делается вызов. Я использую таможню description
получить член на resources :articles
.
# views/articles/_article.html.erb
<div class="article" id="article-<%= article.id %>">
<%= link_to description_article_path(article), remote: true, class: "article__expand" do %>
<span class="glyphicon glyphicon-plus"></span>
<% end %>
<div class="article__info">
</div>
</div>
# views/articles/description.js.erb
$(function() {
if ($("#article-<%= @article.id %> .article__description").length) {
$("#article-<%= @article.id %> .article__description").toggle();
} else {
$.getJSON('/articles/<%= @article.id %>.json', function(data) {
var description = ('<p class="article__description">' + data.description + '</p>')
$('#article-<%= @article.id %> .article__info').prepend(description);
});
}
});
Я только гадать здесь, так как я не эксперт CSS , Но если щелкнуть '.article_expand', он будет расширен и класс должен измениться на нечто вроде' .article_minimize'. Вы реализовали какие-либо такие функции? – bork
@bork Нет ничего подобного, я буду редактировать в представлениях. Они довольно простые, поэтому я думаю, что это проблема Capybara, но я могу ошибаться. – Jane
Какой драйвер capybara вы используете? –