2009-10-10 5 views
1

J'ai un scénario négatif à tester avec le concombre. Spécifiquement, je veux m'assurer que quand quelqu'un publie une URL avec un handle invalide alors le site retourne une erreur.Comment puis-je avoir un scénario négatif avec le concombre dans Rails?

Mon scénario ressemble à:

Scenario: create person with too short a handle When person named "Fred" with handle "tooshort" updates Then I should get a 500 error

Mon étape ressemble

When /^person named "(.)" with handle "(.)" updates$/ do |name, handle| visit "/mobile/update?handle=#{udid}&name=#{name}"

Quand je lance le scénario, il ne fait jamais à la partie THEN en raison de l'erreur de la Lorsque

ERROR: No Handle (RuntimeError)

Ceci est CORRECT, le qui devrait tourner une erreur 500.

Je ne sais pas comment exprimer le test Quand en négatif. Peut-être que je devrais utiliser quelque chose de différent d'un quand?

+0

cela ne résout pas le problème, mais vous ne devriez pas être de retour 50 0 erreur ici. 5xx signifie "Le serveur n'a pas réussi à répondre à une demande apparemment valide". Si le handle est trop court, ce n'est pas une requête valide. –

Répondre

1

Si pour vous le bon comportement de votre Lorsque l'étape est de générer une erreur vous cas, utilisez un bloc lambda pour attraper ce RuntimeError:

When /^person named "(.)" with handle "(.)" updates$/ do |name, handle| 
    lambda { 
    visit "/mobile/update?handle=#{udid}&name=#{name}" 
    }.should raise_error("No Handle") 
end 

Vous pourriez avoir à modifier la partie RAISE_ERROR que je ne savoir exactement le type d'erreur que vous soulevez

Et vous pouvez avoir une étape ensuite comme celui-ci (point de départ)

Then /^the save should not be successful$/ do 
    response.should be_nil 
end 
+0

Je peux voir comment utiliser cette approche; Cependant, je devrais écrire des moments spéciaux pour les cas négatifs. C'est bon. J'espérais quelque chose comme "Excepté quand" afin que je n'aie pas spécial quand les cas. – RAVolt

+0

En fait, c'est ce que j'ai fait dans un de mes projets passés et je ne suis pas complètement satisfait non plus. Mais je ne vois pas d'autre moyen de le faire. Si vous voulez quelque chose de plus propre, vous ne pourriez peut-être pas déclencher une erreur mais définir un code d'état "Erreur" pour votre réponse d'action avec un message d'erreur approprié. ex: wants.json {rendre: json => @ user.errors,: status =>: unprocessable_entity} –

Questions connexes