2010-10-23 1 views
0

J'utilise Cucumber pour tester le comportement d'une application de bout en bout dans mon service Web basé sur Rails. J'ai actuellement un aperçu du scénario qui ressemble à ce qui suit (constituant un scénario hypothétique ici de créer un utilisateur avec un autre utilisateur):Méthode correcte d'interaction avec un service Web RESTful utilisant le concombre

Scenario Outline: Create a user with another user 
    Given I want to create a user as a user "<user>" 
    When I create a user with name "<name>" 
    And the user's age is "<age>" 
    Then then the response should be "<response>" 

Scenarios: Create user with 3 args 
    | user | name   | age    | response     | 
    | bob | joe   | 25    | <some_xml_response>   | 

Je vais avoir un peu de difficulté à comprendre comment je devrais écrire l'étape définitions pour ce contour. Fondamentalement, je suis actuellement en train de concaténer un blob XML (pour le nom + l'âge) et j'ai besoin de faire quelque chose de similaire à la façon dont rspec utilise: post à publier sur un contrôleur et voir une réponse. Mes définitions d'étape ressemblent actuellement à:

Given /^I want to create a user with another user "([^"]*)"$/ do |user| 
    @reqxml << "<user><creator>#{user}</creator>" 
end 

When /^I create a user with name "([^"]*)"$/ do |name| 
    @reqxml << "<name>#{name}</name> 
end 

And /^the user's age is "([^"]*)"$/ do |age| 
    @reqxml << "<age>#{age}</age>" 
end 

Then /^then the response should be "([^"]*)"$/ do |response| 
# ?? not sure if I can use rspec :post here? 
end 

Quelle est la meilleure façon d'améliorer ce contour de concombre? J'ai beaucoup plus que je veux tester. Dans rspec, c'est plutôt simple et peut-être que la bonne réponse est de coller ceci dans RSpec. Mais je veux vraiment obtenir une meilleure utilisation de Cucumber et avoir une meilleure image "plus grande" avec des tests d'histoire d'utilisateur de bout en bout tel que celui ci-dessus.

Répondre

1

J'utilise capybara/rspec/concombre et cornichon en concert pour minimiser la quantité réelle de définitions de pas que je dois écrire, et en général cela fait le travail. Pickle fait des étapes telles que "Étant donné qu'un modèle existe avec" disponible automatiquement, les étapes web capybara s'occupent de l'automatisation du navigateur comme "goto route" ou fournit également des fonctions css et xpath pour vérifier la sortie avec des étapes telles que " doit contenir » etc ....

de cette façon, vous pouvez tester votre tapis, ce qui est une sorte de point de concombre

Mon opinion personnelle est que le concombre est un domaine spécifique et la langue en tant que telle, ne peut pas toujours être en mesure de décrire ce que vous essayez de faire d'une manière concise. (pensez aux relations d'objet complexes). Si vous avez des utilisateurs non-techniques qui ont besoin de lire vos tests, c'est très bien, mais cela ne va pas à l'encontre de rspec ordinaire.

Vos marches de concombre sont un peu décalées. "Given" décrit les conditions préexistantes, pas vos objectifs. "Quand" devrait décrire les actions que vous prenez pour créer un utilisateur, et "Alors" devrait vérifier que les actions prises ont affecté votre objectif.

0

Bien que cela ait été fait, tester des API avec du concombre apporte une sorte de douleur particulière.

Si votre API est vraiment reposante, l'écriture de spécifications "contrôleur" pour l'intégration devrait être très bien. Ou, si vous voulez vraiment "bon" tests d'intégration de la pile complète: Faites-vous une faveur et utilisez capybara/rspec au lieu de concombre ...

Questions connexes