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?
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.
En aparté. Cette ligne
page.status_code.should = '404'
Devrait être
page.status_code.should == 404
Cela a fonctionné pour moi avec capybara-webkit.
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.
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
Essaye le
expect(page).to have_http_status(200)
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