路由测试因匹配路由而失败

时间:2013-02-15 21:57:39

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

我的路线中有这行代码

namespace :api, defaults: {format: 'json'} do
  namespace :v1 do
    match '/auth/:provider/callback', to: 'sign_in#authenticate'
  end
end

我的测试

require 'spec_helper'

describe "Routing" do
  it "should route to sign_in#authenticate" do
    expect(post: 'api/v1/auth/:provider/callback').to route_to({ controller: 'api/v1/sign_in', action: 'authenticate',  format: 'json' })
  end

end

然而,无论我做什么,我都会不断收到错误

No route matches "/api/v1/auth/:provider/callback"

为了让这个测试通过,我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我相信您收到的错误是因为匹配默认为GET请求,但您正在测试规范中的POST请求。您应该能够通过将路线更改为:

来解决问题
match '/auth/:provider/callback', to: 'sign_in#authenticate', via: :post

我个人的偏好是使用post方法而不是匹配,它只是对我更好:

post '/auth/:provider/callback' => 'sign_in#authenticate'