【问题标题】:How to request (GET/POST) routes in RSpec that have a wildcard如何在 RSpec 中请求(GET/POST)具有通配符的路由
【发布时间】:2013-04-10 22:30:56
【问题描述】:

我在 Rails 中有这条(诚然可怕的)路线:

范围'/软件'做 发布 '/:software_id/:attachment_id/event/*event' => 'software#post_event',如:'post_event' 结尾

(我会更改它,但要使用旧版 API)

我正在为它编写一个 RSpec 测试。

rake routes 给我:

post_event POST /software/:software_id/:attachment_id/event/*event(.:format) api/version1301/software#post_event

我的测试是这样的:

描述“post_event”做 它“应该以 204 响应” 参数 = { attachment_id:@attachment.uid, 软件ID:@license.id } 发布:post_event,参数 response.code.should eq "204" 结尾 结尾

但我收到以下路由错误:

失败/错误:发布:post_event,参数 动作控制器::路由错误: 没有路由匹配 {:format=>"json", :name_path=>:api, :attachment=>"7b40ab6a-d522-4a86-b0de-dfb8081e4465", :software_id=>"0000001", :attachment_id=>"7b40ab6a- d522-4a86-b0de-dfb8081e4465", :controller=>"api/version1301/software", :action=>"post_event"} # ./spec/controllers/api/version1301/software_controller_spec.rb:62:in `block (4 levels) in '

你如何处理带有通配符(事件)的路由?

【问题讨论】:

    标签: ruby ruby-on-rails-3 rspec rspec-rails


    【解决方案1】:

    (回答我自己的问题)

    结果证明这是一个“新手”错误。

    路由的通配符(事件)部分仍然需要一个参数。我没有传递“事件”参数,因此路线不完整。

    以下代码有效:

    描述“post_event”做 它“应该以 204 响应” 参数 = { attachment_id:@attachment.uid, 软件ID:@license.id, 事件:'一些/事件' } 发布:post_event,参数 response.code.should eq "204" 结尾 结尾

    /*event(.:format) 表示它需要一个参数。

    对自己和他人的特别说明:

    如果您在 Rails 中遇到过路由错误,请验证您是否传递了所有参数。

    【讨论】:

    • 安装在作用域内的引擎也存在类似问题:作用域“*lang”{ mount XX::Engine, at: '/' }。我必须在测试中将 'lang: "en"' 传递给 get 才能使其正常工作......我花了 2 天时间才找到......
    • 最近我一直在写routing specs 我遇到的所有非 RESTful 路由。避免了一些头痛。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2013-09-17
    • 2014-08-02
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多