私はRuby on Rails 5.0.1で初めてユニットテストを試しています(テストなしで数回設計されたサイトですが、適切なテストの価値を理解し始めたばかりです...)物事のハングアップ。私はルーティングが正しく動作することを確認するためにいくつかのテストを書いています。Railsがリダイレクトで3XXを与えず、単体テストが失敗するのはなぜですか?
テスト/コントローラ/ static_page_controllers_test
require 'test_helper'
class StaticPagesControllerTest < ActionDispatch::IntegrationTest
test "root should get static_pages home" do
get '/'
assert_redirected_to static_pages_home_url
end
test "static_pages root should get static_pages home" do
get '/static_pages'
assert_redirected_to static_pages_home_url
end
[some other tests]
end
私はstatic_pages
home
埋め込まれたルビーhtmlファイルへのルートとstatic_pages
ルートからリダイレクトするために、いくつかのルーティングコードを書かれています。このコードは、ブラウザが/static_pages
または/
の場合は、static_pages/home.html.erb
ページが読み込まれるという意味で、正しくリダイレクトされます。
アプリ/設定/ routes.rbを
Rails.application.routes.draw do
get '/static_pages' => 'static_pages#home'
get 'static_pages/home'
get 'static_pages/help'
get 'static_pages/about'
root 'static_pages#home'
end
私は、彼らがまだ失敗しているリダイレクトのための私のユニットテストを実行。ルートURLに
rails test
# Running:
F
Failure:
StaticPagesControllerTest#test_root_should_get_static_pages_home [/home/ubuntu/workspace/sample_app/test/controllers/static_pages_controller_test.rb:6]:
Expected response to be a <3XX: redirect>, but was a <200: OK>
bin/rails test test/controllers/static_pages_controller_test.rb:4
..F
Failure:
StaticPagesControllerTest#test_static_pages_root_should_get_static_pages_home [/home/ubuntu/workspace/sample_app/test/controllers/static_pages_controller_test.rb:11]:
Expected response to be a <3XX: redirect>, but was a <200: OK>
bin/rails test test/controllers/static_pages_controller_test.rb:9
.
Finished in 0.821392s, 6.0872 runs/s, 6.0872 assertions/s.
5 runs, 5 assertions, 2 failures, 0 errors, 0 skips
迅速wget
はRailsのプーマサーバが代わりに300ドのHTTP 200を返して確認し、私は手動でHTTPを変更する必要が自分自身または私は取り扱いしていますを要求何らかの方法で間違ってリダイレクトしますか?私の単体テストが正しく動作し、サーバーが適切なHTTPステータスコードを返すようにこれを変更するにはどうすればよいですか?
'get/static_pages 'に修正すると:redirect(' static_pages/home ')'はドキュメントごとに2番目のテストをパスします。しかし、リンクされたdocにリストされている 'to:redirect'で' root'を使う方法はないようです。 'root 'の代わりに' get/'を使うことができます。これは、読みやすさが少し劣ることを除けば、副作用を引き起こす可能性がありますか? –
@RailsKiddieあなたのテストはあなたを誤解していると思います。リダイレクトを実行するために特殊な構文を使用する必要があることを示すガイドをリンクしましたが、本当に必要な/必要とは思わないと思います。 [あなたは別のアサーションを試すことができます](http://api.rubyonrails.org/classes/ActionDispatch/Assertions/RoutingAssertions.html#method-i-assert_routing) – Tom
はい、あなたはテストについて正しいです、これは本当に役に立つコメント。 –