web-dev-qa-db-ja.com

URI :: InvalidURIError:不正なURI(URIではありませんか?)テストRailsコントローラー

URI::InvalidURIErrorテストRailsホームコントローラー:

require 'test_helper'

class HomeControllerTest < ActionDispatch::IntegrationTest
  test "should get index" do
    get :index
    assert_response :success
  end
end

次のエラーが発生します。

E

Error:
HomeControllerTest#test_should_get_index:
URI::InvalidURIError: bad URI(is not URI?): http://www.example.com:80index
    test/controllers/home_controller_test.rb:7:in `block in <class:HomeControllerTest>'

スタックは次のとおりです。

Rails 5.0.0.beta3
minitest (5.8.4)
13
Luca G. Soave

コントローラテストはActionController::TestCaseから継承しますが、テストはActionDispatch::IntegrationTestから継承します。したがって、コントローラーテストではなく、統合テストを使用しています。

エラーは次のとおりです。

http://www.example.com:80index

それは正しく見えませんね? ;-)

解決策は、fullパスを使用することです。

get '/index'

統合テストは、実際には特定のコントローラー(またはその他のコントローラー)に関連付けられていないことを忘れないでください。これらは、アプリケーション内のいくつかのコンポーネントの統合をテストします。したがって、indexUserControllerアクションをテストする場合は、おそらく/users/indexを使用する必要があります。

統合テストではなくコントローラーテストを行う場合は、正しいスーパークラスを設定する必要があります。 get :index(インデックスメソッド用)を使用すると、正常に機能するはずです。

23
Martin Tournoij

あなたが試すことができます:

get home_index_path

の代わりに:

get :index
1
aarkerio