Rails 5.1 a introduit system testing qui utilise Capybara avec Selenium pour tester l'application UI of Rails.Comment configurer la page d'erreur 404 dans le test du système Ruby on Rails
Je me demande comment utiliser ce test système pour tester l'interface utilisateur des pages d'erreur.
Pour les tests de contrôleur standard, nous pouvons faire quelque chose comme ci-dessous pour affirmer réponse à être 404.
test 'should get not_found' do
get errors_not_found_url
assert_response :not_found
end
Mais pour les tests système, si je vais à une page 404, exception rejetteront niveau du contrôleur et les tests se terminent immédiatement sans rendre la page.
test '404 page should render with the correct title' do
# act.
visit NOT_FOUND_URL
# assert.
assert_equal("#{APP_NAME} - #{TITLE_404}", page.title)
end
Une exception est levée au niveau du contrôleur.
$ rails test test/system/error/error_page_test.rb
Run options: --seed 30076
# Running:
Puma starting in single mode...
* Version 3.9.1 (ruby 2.3.1-p112), codename: Private Caller
* Min threads: 0, max threads: 1
* Environment: test
* Listening on tcp://0.0.0.0:55237
Use Ctrl-C to stop
2017-07-09 11:10:45 +1200: Rack app error handling request { GET /books/12345678 }
#<ActionController::RoutingError: Could not find book '12345678' by id or name>
/myapp/app/controllers/books_controller.rb:7:in `index'
/Users/yze14/.rvm/gems/ruby-2.3.1/gems/actionpack-5.1.2/lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
/Users/yze14/.rvm/gems/ruby-2.3.1/gems/actionpack-5.1.2/lib/abstract_controller/base.rb:186:in `process_action'
...
Dans un environnement de développement/test, config.consider_all_requests_local
peut être réglé sur false
pour afficher la page d'erreur au lieu de stracktrace. Mais cela ne dérange pas l'exception lors des tests du système.
Merci! Vous venez de vérifier comment utiliser 'Capybara.raise_server_errors = false' dans' test/application_system_test_case.rb'? J'utilise le pilote 'poltergeist'. –
@YiZeng. Vous pouvez le définir dans n'importe lequel de vos fichiers d'installation de test, mais vous voudrez probablement le laisser comme vrai pour la plupart des tests afin de connaître les erreurs soulevées par votre application - donc mettre à false dans un bloc d'installation pour les tests qui vérifient votre pages d'erreur, et réinitialiser à true dans un démontage est probablement le plus logique. –
Cela semble fonctionner avec Capybara côté des choses où il ignore une telle erreur d'application. Mais en ce qui concerne les tests du système Rails, la page affiche toujours "Une erreur de niveau inférieur non gérée s'est produite.Les journaux d'application peuvent contenir des détails." au lieu de rendre une page d'erreur réelle. –