URI :: InvalidURIError:错误的URI(不是URI?)测试Rails控制器

时间:2016-03-10 19:28:19

标签: ruby-on-rails ruby controller tdd minitest

我得到URI::InvalidURIError测试Rails Home控制器:

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)

2 个答案:

答案 0 :(得分:22)

在您的测试中,控制器测试继承自ActionController::TestCase 继承自ActionDispatch::IntegrationTest。因此,您使用集成测试而不是控制器测试。

错误是:

  

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

看起来不对,是吗? ; - )

解决方案是使用完整路径:

get '/index'

请记住,集成测试并非真正与任何特定控制器(或其他任何内容)相关联。他们测试应用程序中几个组件的集成。因此,如果您正在测试index的{​​{1}}操作,则可能需要使用UserController

如果您打算进行控制器测试而不是集成测试,则需要设置正确的超类。使用/users/index(对于索引方法)应该可以正常工作。

答案 1 :(得分:1)

您可以尝试:

get home_index_path

而不是:

get :index