2015-03-04 1 views
0

J'ai un test Rspec avec le code comme ceci:Rspec/Capybara non-déterminisme

visit root_path(cc: coupon.code) 

using_wait_time 5 do 
    page.should have_content 'Welcome! You have applied coupon ' + coupon.code 
end 

Fondamentalement, l'utilisateur peut frapper notre chemin racine avec un code promo, et que le code devrait se mettre dans un cookie et confirmé avec un retour visuel.

Ce test fonctionne si je le lance par lui-même:

Finished in 36.81 seconds (files took 6.69 seconds to load) 
2 examples, 0 failures 

Mais si je le lance dans le cadre de toute ma série de tests, je reçois des erreurs:

1) Setup sets coupon 
    Failure/Error: page.should have_content 'Welcome! You have applied coupon ' + coupon.code 
     expected #has_content?("Welcome! You have applied coupon foo") to return true, got false 
    # ./spec/requests/setup_spec.rb:29:in `block (3 levels) in <top (required)>' 
    # ./spec/requests/setup_spec.rb:28:in `block (2 levels) in <top (required)>' 
    # ./spec/spec_helper.rb:87:in `block (3 levels) in <top (required)>' 
    # ./spec/spec_helper.rb:86:in `block (2 levels) in <top (required)>' 

La seule façon que peut se produire si le cookie n'est pas réglé. Est-ce que quelqu'un sait pourquoi courir le test par lui-même plutôt que le faire fonctionner dans le cadre de toute la suite ferait une différence?

Répondre

0

Essayez de mettre cela quelque part avant votre test (juste avant votre visite, ou même dans un bloc d'arrière-plan):

page.driver.browser.manage.delete_all_cookies 

Normalement, on appelle cela entre les tests, mais cela devrait aider davantage diagnostiquer ce qui se passe avec votre spec.

+0

J'ai essayé cela en utilisant la gemme show_me_the_cookies, et cela n'a eu aucun effet. Notez que l'utilisation de browser.manage ne fonctionne qu'avec Selenium. Si vous utilisez Webkit, cela provoquera une erreur. –