web-dev-qa-db-fra.com

Comment tester le code de réponse avec Capybara + Selenium

J'ai les spécifications suivantes:

it "deletes post", :js => true do 
...
...
page.status_code.should = '404'

end 

La ligne page.status_code me donne cette erreur:

Capybara::NotSupportedByDriverError

Comment vérifier le code d'état de la page?

30
deb

status_code n'est actuellement pas pris en charge par le pilote Selenium. Vous devrez écrire un test différent pour vérifier le code d'état de la réponse.

18
eugen

En aparté. Cette ligne

page.status_code.should = '404'

Devrait être 

page.status_code.should == 404

Cela a fonctionné pour moi avec capybara-webkit.

44
Apie

Soit vous passez à un autre pilote (comme rack-test) pour ce test, soit vérifiez que la page affichée est la page 404 (le contenu doit être 'introuvable' dans h1).

Comme @eugen l'a dit, Selenium ne prend pas en charge les codes d'état.

3
Leonid Shevtsov

Le pilote Web Selenium n'implémente pas status_code et il n'existe aucun moyen direct de tester response_code avec Selenium (choix du développeur).

Pour le tester, j'ai ajouté dans mon layout/application.html.erb:

<html code="<%= response.try(:code) if defined?(response) %>">[...]</html>

Et puis dans mon test:

def no_error?
  response_code = page.first('html')[:code]
  assert (response_code == '200'), "Response code should be 200 : got #{response_code}"
end
3
Oxyless

Essaye le

expect(page).to have_http_status(200)
2
Ajay

Utilisez js pour faire une demande et obtenir le statut ci-dessous:

js_script = <<JSS
xhr = new XMLHttpRequest();
xhr.open('GET', '#{src}', true);
xhr.send();
JSS
actual.execute_script(js_script)
status = actual.evaluate_script('xhr.status') # get js variable value

Vérifiez https://Gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db pour plus de détails

1
G. I. Joe