2017-07-07 5 views
1

Je suis en train de faire le test suivant:Vérifiez si Capybara :: node :: élément a été supprimé par jQuery.remove()

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 

Ce test est suppossed travailler parce que le JS suivant supprime la carte de la page:

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

Comment je vérifie si le fichier html .card a été supprimé de la page?

Répondre

0

Pour vérifier si quelque chose n'est pas visible sur la page que vous feriez

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

ou

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

Ainsi, il devient général

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

Cela ne fonctionnera si tous les éléments .card sont supprimés. S'il y aurait encore d'autres éléments .card sur la page, alors basez le contrôle sur le texte que vous attendez dans la carte ou tout autre attribut/propriété sur l'élément de la carte (id, etc), comme la description des éléments ou quoi que ce soit

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

Si vous traitez avec les .card éléments beaucoup, vous pouvez écrire un sélecteur Capybara sur mesure pour rendre les choses plus faciles à lire, localiser la définition CSS d'une « carte » etc comme

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 

qui devrait alors autoriser

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

etc.

+0

Mais il n'y a pas moyen de vérifier en utilisant 'card'? –

+0

@RodrigoChaves Pas vraiment, selon exactement comment 'carte' est situé, quand l'élément est enlevé' card' peut effectivement pointer vers un nouvel élément, comme on peut le voir dans la démo - https://gist.github.com/ twalpole/ac5c893a6f1f27ba3005908421d3e45d - dans lequel 'card' pointe vers les trois éléments' .card' de la page lorsque les éléments sont supprimés. Ceci est dû au rechargement automatique de Capybaras qui traite les actualisations/rechargements de pages dynamiques. Les tests doivent vraiment se concentrer sur ce que l'utilisateur voit sur la page plutôt que de se préoccuper d'éléments spécifiques. –