【问题标题】:Custom routes in rspecrspec 中的自定义路由
【发布时间】:2013-11-21 20:37:42
【问题描述】:

我在config/routes.rb 中有一条看起来像这样的路线:

get '/auth/:provider/callback', to: 'oauths#create'

rake routes 给我看:

GET    /auth/:provider/callback(.:format)                   oauths#create

我正在编写一个 rspec 测试,开头是:

describe OauthsController do
  describe '#create' do
    let(:request) { ->{post :create} }
    subject { request.call }

运行该测试时,我得到:

Failure/Error: let(:request) { ->{post :create} }
 ActionController::UrlGenerationError:
   No route matches {:controller=>"oauths", :action=>"create"}

我如何告诉 rspec 正确的路线?

【问题讨论】:

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


    【解决方案1】:

    您需要:provider 参数,您需要提供一个:)

    describe OauthsController do
      describe '#create' do
        let(:request) { ->{get( :create, :provider => 'some provider' )} }
        subject { request.call }
      end
    end
    

    正如@peter-alfvin 所说,这是一个 GET 而不是一个 POST。

    【讨论】:

    • 路由只是为get定义的,对吧?这个post 会被处理吗?
    • 啊,谢谢!是的,我会将其切换为get,我想我在尝试解决问题时已将其更改为post。
    • 如果这个解决方案对你有用,你能接受这个答案吗? :)
    【解决方案2】:

    我尝试了上面的解决方案,但没有奏效。我得到了:

    ArgumentError:
       unknown keyword: provider
    

    RSpec 现在似乎需要params 参数。对应的调用如下所示:

    get(:index, params: { provider: 1 })
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 2019-08-07
      相关资源
      最近更新 更多