2017-07-07 2 views
1

Ich versuche, den folgenden Test zu machen:Überprüfen Sie, ob Capybara :: Knoten :: Element wurde von jQuery.remove entfernt()

it 'remove item from cart' do 
    visit cart_path 
    button = page.find("a[href='/carts/#{item.id}/remove']") 
    card = find_ancestor_with_class(button, '.card') 
    button.click 
    # check if card has been removed from page 
end 

Dieser Test arbeiten suppossed wird, da die folgende JS die entfernt Karte Seite:

$.ajax({ 
    url: link, 
    method: "GET", 
    success: function() { 
    $('#alert-modal').modal('show'); 
    $(button).closest(".card").remove(); 
    } 
}); 

Wie ich überprüfen, ob die .card html von Seite entfernt wurde?

Antwort

0

Um zu überprüfen, ob etwas nicht sichtbar auf der Seite möchten Sie wird es also insgesamt

expect(page).to have_no_css(".card") 

oder

expect(page).not_to have_css(".card") 

tun

visit cart_path 
click_link(href: "/cars/#{item.id}/remove")  
expect(page).not_to have_css(".card") 

, dass nur dann, wenn alle arbeiten Die .card Elemente werden entfernt. Wenn auf der Seite noch weitere .card Elemente vorhanden wären, dann basiere die Prüfung auf Text, der auf der Karte oder einem anderen Attribut/Merkmal auf dem Kartenelement (ID, usw.) zu erwarten ist, wie die Beschreibung der Elemente oder was auch immer gezeigt würde

expect(page).not_to have_css(".card", text: item.description) 

Wenn Sie mit den .card Elemente befassen viel Sie auch eine benutzerdefinierte Capybara Selektor schreiben könnte, um die Dinge einfacher zu lesen, lokalisieren die CSS-Definition einer „Karte“ usw. wie

Capybara.add_selector :card do 
    xpath do |content| 
    xp = XPath.css('.card') 
    xp = xp[XPath.string.n.is(content)] unless content.nil? 
    xp 
    end 
end 

die sollte dann erlauben

expect(page).to have_no_selector(:card) 
expect(page).to have_no_selector(:card, item.description) 

usw.

+0

Aber es gibt keine Möglichkeit, mit 'Karte' zu ​​überprüfen? –

+0

@RodrigoChaves Nicht wirklich, je nachdem, wie 'card' sich befindet, wenn das Element entfernt wird, kann' card' tatsächlich auf ein neues Element zeigen, wie in der Demo zu sehen ist - https://gist.github.com/ twalpole/ac5c893a6f1f27ba3005908421d3e45d - wobei "card" auf alle drei '.card' Elemente auf der Seite zeigt, wenn Elemente entfernt werden. Dies liegt an Capybaras automatischem Neuladen, das mit dynamischen Seitenaktualisierungen/Neuladevorgängen beschäftigt ist. Tests sollten sich wirklich darauf konzentrieren, was der Benutzer auf der Seite sieht, anstatt sich um bestimmte Elemente zu kümmern. –

Verwandte Themen