En utilisant Cucumber et Capybara, existe-t-il un moyen de vérifier qu'une chaîne n'est PAS présente sur une page?
Par exemple, comment pourrais-je écrire le contraire de cette étape:
Then /^I should see "(.*?)"$/ do |arg1|
page.should have_content(arg1)
end
Cela passe si arg1
est présent.
Comment pourrais-je écrire une étape qui échoue si arg1
est trouvé?
Il y a un testeur has_no_content
à Capybara. Donc tu peux écrire
Then /^I should not see "(.*?)"$/ do |arg1|
page.should have_no_content(arg1)
end
Dans Rspec 3.4 actuellement (2016), c'est la méthode recommandée pour tester l'absence de contenu:
expect(page).not_to have_content(arg1)
Vous pouvez aussi utiliser should_not si vous voulez le lire un peu mieux:
Then /^I should not see "(.*?)"$/ do |arg1|
page.should_not have_content(arg1)
end
Quelques informations supplémentaires: https://www.relishapp.com/rspec/rspec-expectations/docs
actuellement, vous pouvez utiliser:
Then /^I not see "(.*?)"$/ do |arg1|
expect(page).to have_no_content(arg1)
end
Et si le contenu se trouve dans la page, votre test est rouge
SO passe souvent beaucoup de temps à chercher une réponse qui fonctionne réellement. Beaucoup de réponses ne fonctionnent pas (peut-être que de nombreuses réponses précédentes ont été déconseillées? Ou cela dépend de la version de Rails/gems que vous utilisez).
Mais pour moi cela a finalement réussi:
expect(page).wont_have_content("Text you are looking for")