web-dev-qa-db-fra.com

Redirection de test avec RSpec et Capybara (Rails)

Je viens d'apprendre à quel point RSpec et Cabybara sont cool, et je travaille maintenant pour apprendre à écrire un test réel.

J'essaie de vérifier si après avoir cliqué sur un lien, il y a une redirection vers une page spécifique. Voici le scénario

 
 1) J'ai une page /projects/list
 - J'ai une ancre avec html "Back" et elle est liée à/projects/show 
 
 Vous trouverez ci-dessous le test que j'ai écrit dans rspec 
 
 Décrivez "Échantillon" faites 
 Décrivez "GET/projets/liste" faites 
 Ce "échantillon test" 
 visitez "/projects/list"
 click_link" Retour "
 assert_redirected_to"/projects/show "
 end 
 end 
fin

Le test échoue avec un message d'échec comme ci-dessous

 Échec/erreur: assert_redirected_to "/projects/show"
 ArgumentError: 
 @Request doit être un ActionDispatch :: Request 

Veuillez me suggérer comment tester la redirection et que fais-je de mal?

32
balanv

Essayez current_path.should == "/projects/show"

Capybara implémente également un current_url méthode pour l'URL complète.

Plus d'informations dans le docs .

69
zetetic

Je ne suis pas sûr que cela puisse être ce dont vous avez besoin, mais dans mes tests, je préfère une telle approche:

...
subject { page }
...
before do
    visit some_path_path
    # do anything else you need to be redirected
end
it "should redirect to some other page" do
    expect(page.current_path).to eq some_other_page_path
end
11
kovpack

Depuis le Devise wiki :

Dans Rails lorsqu'une application rack redirige (tout comme Warden/Devise vous redirige vers la page de connexion), la réponse n'est pas correctement mise à jour par la session d'intégration. Par conséquent, l'assistant assert_redirected_to ne travail.

Cette page a également les mêmes informations: Rspec assurez-vous que nous nous sommes retrouvés au bon chemin

Vous devrez donc tester que vous êtes maintenant sur cette URL, plutôt que de vérifier que vous y êtes redirigé.

5
Jesse Wolgamott