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

Ruby on rails URI::InvalidURIError:测试Rails控制器的错误URI(不是URI?),ruby-on-rails,ruby,controller,tdd,minitest,Ruby On Rails,Ruby,Controller,Tdd,Minitest,我得到URI::InvalidURIError测试Rails主控制器: require 'test_helper' class HomeControllerTest < ActionDispatch::IntegrationTest test "should get index" do get :index assert_response :success end end 控制器测试继承自ActionController::TestCase,而您的测试 继承自A

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

require 'test_helper'

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

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

错误是:

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

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

记住,集成测试实际上并不与任何特定的控制器(或其他任何东西)相关联。它们测试应用程序中几个组件的集成。因此,如果您正在测试
UserController
index
操作,您可能需要使用
/users/index

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

您可以尝试:

get home_index_path
而不是:

get :index

嘿,我根本没有在我的控制器测试中看到“ActionDispatch::IntegrationTest”。。。我正在深入研究。。。奇怪的是,在Rails 5.0.0.beta3中,scaffold generator似乎在默认情况下生成这样的测试控制器/design...@LucaG.Soave Taht似乎很奇怪。。。我自己并不经常使用生成器工具,但也许你调用它是错误的?在任何情况下,集成测试与控制器测试都没有太大区别,如果您在控制器测试中可以做任何事情,那么您可以在集成测试中做任何事情(但不是相反)。我更喜欢自己使用集成测试。@Smoker集成测试已经取代了Rails 5中的TestCase。
put:update,id:@product,product:@update
如何在url表单中编写这个东西,我收到了相同的错误
get '/index'
get home_index_path
get :index