2012-07-31 1 views
0

Essayer d'utiliser une session, mais obtenir des résultats étranges.Plusieurs sessions avec Rspec et Capybara?

Le code RSpec suivant semble générer 2 sessions distinctes:

visit start_path 
post session_path, { foo: "bar" } 

Dans la méthode appelée par le contrôleur start_path:

session [: a commencé] = 'oui' met « Start: # {} session.inspect »

Dans le contrôleur de sessions:

def create 
    session[:foo] = params[:foo] 
    head :created 
    puts "Sessions controller: #{session.inspect}" 
end 

La sortie ressemble à:

Start: {"session_id"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ... 
Sessions controller: {"session_id"=>"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" ... 

La session ID de sont différents. Est-ce parce que RSpec crée 2 sessions, l'appel de post crée une session séparée, ou mon application fait quelque chose pour séparer les sessions?

Pourquoi deux sessions sont-elles créées?

Essayé de changer create à un autre nom, mais cela n'a pas fait de différence.

Utilisation du cookie store.

+0

Quelle version de rails/rspec/capybara utilisez-vous? – shigeya

+0

En outre, quel pilote utilisez-vous? (J'utilise capybara-webkit avec un grand succès) – shigeya

+0

Rails 3.2.2/Capybara 1.1.2/Rspec 2.11.0 et le pilote intégré Capybara. –

Répondre

0

Merci à Stack Overflow, trouvé ici la solution: Rails - Losing session with Integration Tests and Capybara - CSRF related?

Le problème est que Capybara a sa propre session. Pour utiliser page.driver.post au lieu de post!

+0

J'ai vérifié et je n'utilise pas de post mais 'click_button' pour être en action. Du point de vue du test, remplir des formulaires et soumettre des soumissions pourrait être une meilleure option. – shigeya

+1

Oui, remplir un formulaire en cliquant sur Envoyer est préférable. Pour ce cas, je me moque d'un appel AJAX, donc il n'y a pas de formulaire ou de soumettre. –

Questions connexes