2009-12-08 6 views
0

Donc dans mon dossier de fonctionnalité, j'ai une étape d'arrière-plan de connexion:Rails/concombre/Pickle

Given /^I login$/ do 
    user = Factory(:user) 
    visit '/login' 
    fill_in("login", :with => user.login) 
    fill_in("password", :with => user.password) 
    click_button("Login") 
    @current_user = user 
end 

Dans l'étape suivante, je veux être en mesure d'inclure un user_id, mais ne savez pas comment obtenir le @current_user que j'ai connecté.

Given a post exists with name: "My Post", category_id: 3, user_id: ????? 

Comment puis-je utiliser @current_user pour créer la relation correcte?

Merci.

Répondre

0

Laissez la figure étape sur l'ID au lieu d'essayer de le transmettre dans.

Given /^a post exists with name: "([^\"]+)", category_id: (\d+)$/ do |name, category_id| 
    @post = Post.create!(:name => name, :category_id => category_id, :user_id => @current_user.id) 
end 

Si tel était mon code, je serais probablement obtenir :category_id de là aussi. Je prends des trucs techniques comme les ID d'objets apparaissant dans les descriptions de mes scénarios comme un signe que je suis trop bas avec eux.

+0

C'est en fait une étape de pickle où vous passez d'autres attributs po Je suppose que je devrais juste définir moi-même le pas. –

+0

Ou si dans mon usine, je pourrais faire quelque chose comme: Factory.define: post do | p | p.user_id @ current_user.id p.category_id 2 fin –

+0

Ah, je vois. Je n'avais pas vu de cornichon avant. Je ne suis pas sûr que je l'aime, pour être honnête. Vous commencez à perdre l'aspect anglais ordinaire, qui est l'une des forces du concombre. Préférence personnelle, je sais, mais j'aurais dit un peu comme Donné un post intitulé "Mon Post" dans la catégorie "Sauce canard". Ou quelque chose comme ça. Vos étapes finissent par être plus faciles à réutiliser, mais lire maladroitement. – Baldu

1

Si vous la reformuler ainsi:

Given I created a post with the title "My Post" in the "foobar" category 

alors il devrait être plus évident que la façon dont vous devriez la mettre en œuvre:

Given /^I created post with the title "([^\"]+)" in the "([^\"]+)" category/ do |title, category| 
    current_user.posts.create!(
     :title => title, 
     :category => Category.find_or_create_by_name(category)) 
end 

Évidemment, cela dépend de la façon dont vous avez structuré vos associations, mais ça devrait marcher. Si vous utilisez Factory Girl, alors ce serait quelque chose comme:

Factory.create(:post, :category => ..., :user => current_user) 

Ne pas oublier que les spécifications de votre concombre devrait être dans les termes de ce que l'utilisateur voit et ne, pas la façon dont votre système fonctionne, alors que Baldu dit garder les identifiants d'enregistrement hors des définitions d'étape.

+0

Désolé, j'essaie de le faire en utilisant cornichon. Pour l'instant, je l'ai réécrit de la même manière que vous l'avez dit, mais j'aimerais vraiment profiter du cornichon. –