comment faire pour forcer un concombre scénario à l'échec?
Est-il un moyen de forcer un concombre scénario à l'échec?
J'ai besoin de vérifier pour un peu de faute de scénarios à la fin de chacun de mes tests. J'ai donc pensé que je pouvais faire la vérification pour une "erreur" boîte de dialogue, puis échoue à l'examen, s'il se produit.
C'est possible avec le code ci-dessous il y a cependant un problème. Une fois que je relance l'exception de l'échec! la fonction, puis le concombre arrête l'exécution du reste de l'Après-crochet, de sorte que la fonction de déconnexion ne marche pas appelée.
Était:
After() do |scenario|
#Checking for Error popups
if page.has_selector?(:dialog_message, 1, :text => 'Error')
fail!(raise(ArgumentError.new('Unexpected Error dialog!')))
end
logout
end
Maintenant:
After() do |scenario|
#Checking for Error popups
if page.has_selector?(:dialog_message, 1, :text => 'Error')
scenario.fail!(logout)
end
end
Est-il un meilleur moyen d'échouer à un concombre test sans le déclenchement d'une exception?
OriginalL'auteur snowstreams | 2012-08-03
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir le croc à l'échec en utilisant le cours normal de vos affirmations. N'ai pas fait beaucoup avec Capybara/rspec des exceptions, mais je pense que vous pouvez faire:
Cependant, si vous faites ceci, ne le scénario.l'échec!(), toujours pas de déconnexion. Vous avez besoin d'envelopper dans un commencer-veiller à ce bloc.
Essayez ceci:
Mise à jour
Si vous ne souhaitez pas faire appel à des affirmations et directement échouer le scénario, vous pouvez faire ce qui suit - vous aurez besoin d'utiliser
fail
au lieu defail!
:OriginalL'auteur Justin Ko
Juste une réponse préliminaire que je n'ai pas été en mesure de le vérifier, mais je suppose que l'appel
Raise
est toujours garanti pour interrompre l'exécution (sauf si c'est fait à l'intérieur d'un proc ou lambda c'est donc l'évaluation est reportée).Essayez simplement
scenario.fail!('message')
Merci, j'ai essayé il y a trop. J'ai obtenu l'erreur: undefined method
message' for "message":String (NoMethodError) So I tried this: scenario.fail!(logout) This half worked. At least it ran my logout code and failed the test, but it still gave an error message: undefined method
message " de nil:NilClass (NoMethodError)Je suis un peu confus où cela pourrait venir d' - pourriez-vous mettre à jour la question avec le code actuel, qui est à l'origine de cette erreur?
J'ai mis à jour ma réponse en réponse à votre edition -
scenario.fail!
s'attend à un objet d'exception, donc, de passage dans votrelogout
méthode semble avoir évalué ànil
qui est pourquoi il est de se plaindre.Merci pour l'aide Jon, La déconnexion de la méthode n'est pas prise en appelle une fois de l'échec ou de l'échec! la méthode est appelée. J'ai juste utilisé Justin Ko deuxième solution. Il semble donc que vous avez à utiliser un assurer bloc pour s'assurer de la déconnexion de la fonction est appelée.
OriginalL'auteur Jon M