2016-03-10 45 views
7

uzyskać URI::InvalidURIError testowania kontrolera Rails domowego:URI :: InvalidURIError: bad URI (URI nie jest?) Testowanie kontrolerów Rails

require 'test_helper' 

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

pojawia się następujący błąd:

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>' 

Stos jest następujące:

Rails 5.0.0.beta3 
minitest (5.8.4) 

Odpowiedz

14

testy kontrolera dziedziczą ActionController::TestCase, podczas gdy nasz test dziedziczy po ActionDispatch::IntegrationTest. Więc używasz testu integracji, a nie testu kontrolera.

Błąd jest:

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

To nie wygląda dobrze, prawda? ;-)

Rozwiązaniem jest użycie pełny ścieżkę:

get '/index' 

Pamiętaj, testy integracyjne nie są bardzo przywiązane do konkretnego kontrolera (lub czegokolwiek innego, o to chodzi). Testują one integrowanie kilku składników w aplikacji. Więc jeśli testujesz działanie index, musisz użyć .

Jeśli zamierzałeś wykonać test kontrolera, a nie test integracyjny, chcesz ustawić poprawną nadklasę. Używanie metody get :index (dla metody indeksu) powinno działać dobrze.

+0

hej, nie widzę, że 'ActionDispatch :: IntegrationTest' w moich testach kontrolera w ogóle ... Jestem kopanie do tego –

+1

... dziwne, wydaje się, że w Rails 5.0.0.beta3, generator rusztowań produkuje kontrolery testowe takie jak to domyślnie/projekt ... –

+0

@ LucaG.Soave Taht wydaje się dziwne ... Ja nie naprawdę bardzo często korzystam z narzędzi generatora, ale może źle to robisz? W każdym razie testy integracyjne nie różnią się zbytnio od testów kontrolerów, a AFAIK wszystko, co możesz zrobić w teście kontrolera, możesz zrobić w teście integracji (ale nie na odwrót). Wolę sam korzystać z testów integracji. – Carpetsmoker

1

Można spróbować:

get home_index_path 

zamiast:

get :index