Rails 5.1は、RailsアプリケーションのUIをテストするためにSyleniumでCapybaraを使用するsystem testingを導入しました。Ruby on Railsシステムテストでエラー404ページを設定するには
このシステムテストを使用してエラーページのUIをテストする方法を知りたいと思います。標準コントローラのテストのために
、我々は404
test 'should get not_found' do
get errors_not_found_url
assert_response :not_found
end
しかし、システムのテストのためにする応答を主張するには、以下のような何かを行うことができ、私は404ページに行けば、例外がコントローラレベルでスローされますと、テストはページをレンダリングせずにすぐに終了します。
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
コントローラレベルで例外がスローされます。開発/テスト環境下では
$ 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'
...
、config.consider_all_requests_local
ではなくstracktraceのエラーページを表示するために、false
に設定することができます。しかし、これはシステムテスト中に例外を飲み込むことはありません。
ありがとうございます! 'test/application_system_test_case.rb'で' Capybara.raise_server_errors = false'を使う方法を調べてみてください。私は 'poltergeist'ドライバを使用しています。 –
@ YiZeng。ほとんどのテストでは 'true 'のままにしておきますので、アプリで発生したエラーを見つけることができます。つまり、設定ブロックでfalseを設定すると、エラーページを表示し、ティアダウンで真にリセットするのがおそらく最も理にかなっています。 –
これは、このようなアプリケーションのエラーを無視するもののCapybara側で動作しているようです。しかし、Railsシステムのテストでは、「未処理の低レベルのエラーが発生しました。アプリケーションログに詳細がある可能性があります」というメッセージが表示されます。実際のエラーページを表示するのではなく、 –