ruby - 如何在具有通配符的 RSpec 中请求(GET/POST)路由

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

我在 Rails 中有这条(公认的丑陋的)路线:

scope '/software' do
  post '/:software_id/:attachment_id/event/*event' => 'software#post_event', as: 'post_event'
end

(如果不是遗留 API,我会更改它)

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

rake routes 给我:

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

我的测试是这样的:

  describe "post_event" do

    it "should respond with 204" do
      params = {
        attachment_id: @attachment.uid,
        software_id: @license.id
      }

      post :post_event, params

      response.code.should eq "204"
    end
  end

但我收到以下路由错误:

Failure/Error: post :post_event, params
ActionController::RoutingError:
No route matches {: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 '

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

最佳答案

(回答我自己的问题)

事实证明这是一个有点“新手”的错误。

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

以下代码有效:

describe "post_event" do

  it "should respond with 204" do
    params = {
      attachment_id: @attachment.uid,
      software_id: @license.id,
      event: 'some/event'
    }

    post :post_event, params

    response.code.should eq "204"
  end
end

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

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

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

关于ruby - 如何在具有通配符的 RSpec 中请求(GET/POST)路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16072284/

相关文章:

ruby-on-rails - 无法激活测试单元 (= 1.2.3),已激活测试单元 2.3.0

ruby - 无法使用 watir/taza/rspec 运行测试执行

Rspec 将无法运行 - 错误:在 `bin_path' 中:找不到 rspec-2.0.0.beta.22 的可执行规范(Gem::Exception)

ruby - 如何四舍五入到小数点后两位?

ruby - 元编程:如何发现对象的真实类?

ruby-on-rails - Rails : Sunspot text searching with model associations, 使用 :through

ruby-on-rails - Rails 迁移删除行

ruby - 如何像调用实例方法一样动态调用模块方法?

ruby-on-rails - 如果 config.cache_classes = true,Rails 找不到模块

ruby-on-rails-3 - 导轨 : Difference between create and new methods in ActiveRecord?