web-dev-qa-db-fra.com

Concombre/Capybara: vérifier qu’une page n’a PAS de contenu?

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é?

16
dB'

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers#has_no_text%3F-instance_method

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
25
Piotr Jakubowski

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)
11
Micah

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

8
Adam Sheehan

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

4
Raphael Abreu

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")
0
PolarisTLX