2016-03-10 2 views
7

я URI::InvalidURIError тестирования Rails Главной контроллер:URI :: InvalidURIError: плохой URI (не URI?) Тестирования 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) 

ответ

14

тесты контроллера наследуют от ActionController::TestCase, в то время как ваш тест наследует от ActionDispatch::IntegrationTest. Таким образом, вы используете интеграционный тест, а не тест контроллера.

Ошибка:

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

Это выглядит не так, не так ли? ;-)

Решения использовать полный путь:

get '/index' 

Помните, что интеграционные тесты не очень привязаны к какому-либо конкретному контроллеру (или что-нибудь еще, если на то пошло). Они проверяют интеграцию нескольких компонентов в вашем приложении. Поэтому, если вы тестируете действие indexUserController, вам, вероятно, потребуется использовать /users/index.

Если вы планируете провести тест контроллера, а не тест интеграции, вы хотите установить правильный суперкласс. Использование get :index (для индексного метода) должно работать нормально.

+0

эй, я не видел, что 'ActionDispatch :: IntegrationTest' в моих тестах контроллера на всех ... Я копая в этом –

+1

... странно, кажется, что в Rails 5.0.0.beta3, эшафот-генератор производит тестовые контроллеры, подобные этому по умолчанию/дизайн ... –

+0

@ LucaG.Soave Taht кажется странным ... Я не действительно очень часто используют инструменты генератора, но, возможно, вы ссылаетесь на него неправильно? В любом случае, тесты интеграции не сильно отличаются от тестов контроллера, и AFAIK все, что вы можете сделать в тесте контроллера, вы можете сделать в тесте интеграции (но не наоборот). Я предпочитаю просто использовать интеграционные тесты. – Carpetsmoker

1

Вы можете попробовать:

get home_index_path 

вместо:

get :index