2017-07-08 11 views
0

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に設定することができます。しかし、これはシステムテスト中に例外を飲み込むことはありません。

答えて

1

キャピラがテストでサーバ例外を再発生させたくない場合は、Capybara.raise_server_errors = falseを設定することができます。最後に、あなたがassert_equalを使用すべきではない

第二に、あなたはあなたのGemfileをチェックしweb-consolebetter-errrors、などのような任意の宝石には、開発環境でのみ(ないテスト環境で)ロードされていることを確認する必要があり

titleの場合、Wait/Retrying動作を含む​​を提供するCapybaraを使用する必要があり、テストで潜在的な脆弱性が減少します。

assert_title("#{APP_NAME} - #{TITLE_404}") 
+0

ありがとうございます! 'test/application_system_test_case.rb'で' Capybara.raise_server_errors = false'を使う方法を調べてみてください。私は 'poltergeist'ドライバを使用しています。 –

+1

@ YiZeng。ほとんどのテストでは 'true 'のままにしておきますので、アプリで発生したエラーを見つけることができます。つまり、設定ブロックでfalseを設定すると、エラーページを表示し、ティアダウンで真にリセットするのがおそらく最も理にかなっています。 –

+0

これは、このようなアプリケーションのエラーを無視するもののCapybara側で動作しているようです。しかし、Railsシステムのテストでは、「未処理の低レベルのエラーが発生しました。アプリケーションログに詳細がある可能性があります」というメッセージが表示されます。実際のエラーページを表示するのではなく、 –

関連する問題