如何在Rails测试用例中发送含糊不清的请求?

时间:2016-03-22 12:44:57

标签: ruby-on-rails testing routes

我的路线中有以下定义:

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 }

我应该如何以不同的方法发送这两个请求?

1 个答案:

答案 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