2009-09-10 4 views
1

Chaque fois que cette étapesession [] ne persiste pas dans les étapes de concombre

Given /blah.../ 
    ... 
    cart = session[:cart] ||= Cart.new 
    ... 
end 

fonctionne dans un scénario, il crée un nouveau panier par opposition à (à partir du deuxième appel) ramassant de la session . Quelqu'un sait comment résoudre ce problème?

Je suis sur des rails 2.2.2, concombre 0.3.98, 0.4.4 Webrat

post-scriptum Peut-être ajouter du sélénium dans le circuit pourrait aider. Mais, comme une tentative préliminaire pour obtenir un travail de concombre/selenuim n'a pas réussi, j'ai pensé qu'un peu d'appel à la sagesse était nécessaire avant de s'opposer à Dark Force de 'choses qui ne fonctionnent jamais'

+0

Est-ce censé fonctionner comme car = session [: cart] || Cart.new? – cite

+0

Oui, sauf qu'il affecte en plus Cart.new à la session [: cart] si ce dernier n'est pas défini – artemave

Répondre

0

De la même façon que Webrat simule un navigateur pour tester votre application, vous n'obtenez aucun support de session. Cela signifie que le stockage des informations dans le hachage de session fonctionne pour la requête en cours, mais les informations ne sont pas stockées pour les demandes suivantes. En fonction d'une session créée dans un scénario précédent, ce n'est pas vraiment un bon moyen de tester. Chaque scénario que vous créez doit être autonome. Dans les étapes 'Donné', vous devez vous assurer que les conditions préalables pour les étapes sont remplies, si cela inclut la configuration d'un panier, vous devez le faire.

Une autre astuce: vous pouvez concaténer plusieurs données/Quand/Ensuite, les blocs dans un scénario si vous voulez tester encore une fois que vous avez fait quelques affirmations:

Scenario: Foobar 
Given the cart exists 
When I click checkout 
Then I should see '$100' 
When I click 'Pay' 
Then I should see 'Paid' 

Il semble tentant de concaténer est dans un tout ce que vous scénario, mais cela rend plus difficile le débogage de votre application une fois le scénario échoué. Je préfère beaucoup de scénarios courts!

+0

> Selon une session créée dans un scénario précédent n'est pas vraiment un bon moyen de tester Agreed. C'est pourquoi cela dépend (tente de) sur une session créée dans une étape précédente. > Dans les étapes 'Given', vous devez vous assurer que les conditions préalables pour les étapes sont remplies, si cela inclut la configuration d'un panier, vous devez le faire. C'était exactement ce que j'essayais de réaliser. – artemave

0

Il n'y a pas vraiment de moyen de le faire car cucumber simule votre navigateur. Tous vos navigateurs connaissent des sessions est un cookie opaque qui se transforme poliment en hachage pour chaque demande. La meilleure solution consiste à faire en sorte que votre application crée un panier de la manière habituelle, c'est-à-dire se connecter, sélectionner un produit et l'ajouter au panier. Tout cela peut être fait en une seule étape, mais je le ferais dans des étapes distinctes car il est réutilisable et aussi parce qu'il suit de plus près ce que votre utilisateur est susceptible d'avoir fait. Si le problème est de maintenir des informations entre les étapes, vous pouvez utiliser IVars qui persisteront dans tout le senario. c'est-à-dire:

@cart ||= Cart.new 
+0

Je ne comprends pas. Le concombre retient certainement (émule? N'importe quoi ...) la session entre les étapes. Sinon, le 'wizbang' disparaîtrait du panier au moment de la commande. Alors pourquoi ne pas le rendre accessible?Tout comme dans l'ancienne version de Test :: Unit :: TestCase – artemave

+0

Problème avec les liens via les étapes correctement est que webrat est assez limité dans la navigation par les éléments de la page. Dites, vous avez une liste de deux produits (pain et beurre) avec bouton «ajouter au panier» dans chaque ligne. Maintenant, essayez d'ajouter 2 pains et 3 beurres. Bonne chance avec webrat – artemave

+0

J'ai donc branché du sélénium là où ils ont des sélecteurs xpath (très utile!). Le sélénium est par tous les moyens un moyen de se rapprocher de la réalité. Mais un chemin beaucoup plus lent ... Tout a un prix! – artemave

Questions connexes