RSpec控制器测试:没有匹配的路由

3

这是我的错误信息:

 1) VisitorSessionsController (1) Actions (a) #record params('view') has http success
     Failure/Error: expect ( get :record ).to have_http_status(:success)
     ActionController::UrlGenerationError:
       No route matches {:action=>"record", :controller=>"visitor_sessions"}

没有匹配的路由。我尝试了几种方法来解决这个错误,但首先,请查看控制器操作:

  def record
    case params[:visitor_action]
      when 'view'
        impression = @visitor_session.impressions.create( ad_id: @ad.id )
        impression.start
      when 'click'
        @visitor_session.clicks.create( time: Time.now, ad_id: @ad.id )
    end
    render nothing: true
  end

以下是我尝试解决路由匹配问题的几种方法:

 describe "params('view')" do 
    it "has http success" do
        #get :record, { :visitor_session => "view" }
        #expect(response).to have_http_status(:success)
        #expect ( get :record ).to have_http_status(:success)
    end
 end

然而所有这些都返回相同的错误,即“没有匹配的路由”。我错过了什么?

编辑:相关路由:

get 'record/:visitor_action/:visitor_session_token/:ad_token', to: 'visitor_sessions#record', as: :record_action

你能发布相关的路由吗? - Corey
添加了与所需操作相关的唯一路由。 - ilrein
1个回答

5
你需要提供已定义路由中的所有参数或重新定义路由使其变得可选。无法匹配该路由的原因是你在请求中没有提供:visitor_action:visitor_session_token:ad_token。你可以这样使它们变为可选:

get 'record/(:visitor_action/(:visitor_session_token/(:ad_token)))',to: 'visitor_sessions#record',as: :record_action


请注意,在上述路由中,参数嵌套在一起,以便您可以仅提供:visitor_action:visitor_action:visitor_session_token或全部三个。也就是说,您不能提供下游参数而不提供上游参数(即您不能提供:visitor_session_token但不提供:visitor_action)。提前告知。 - mattforni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接