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