我的路线中有以下定义:
resources :demands { resources: :solutions }
resources :technologies { resources: :solutions }
在我的控制器测试中,我想发送两个请求:
Get /demands/d123/solutions?technology_id=t123
Get /technologies/t123/solutions?demand_id=d123
但它们都匹配相同的调用(在SolutionsControllerTest中):
get :index, demand_id: d123, technology_id: t123
它匹配routes.rb中的第一个定义,即
resources :demands { resources: :solutions }
我应该如何以不同的方法发送这两个请求?
答案 0 :(得分:0)
功能(控制器)测试假冒整个请求阶段。
而不是调用rails服务器并发送实际请求ActionController::TestCase
只是创建一个Request对象并将其传递给控制器实例。这使您可以通过在集成测试中无法实现的方式,因为服务器和测试在不同的进程中运行。
相反,您可能希望使用集成测试并实际发送HTTP请求,以便它通过路由组件:
require 'test_helper'
class AmbiguousRoutesTest < ActionDispatch::IntegrationTest
test "is /demands/d123/solutions?technology_id=t123 ambigous?" do
get "/demands/d123/solutions?technology_id=t123"
# @todo write assertions about the response
end
end