2013-11-21 4 views
1

У меня есть маршрут, который выглядит, как это в config/routes.rb:Пользовательские маршруты в RSpec

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 правильный маршрут?

ответ

1

Вы требуете параметра :provider, вам необходимо предоставить один :)

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

И, как отметил @ питер-alfvin, это GET а не POST.

+0

Маршрут определен только для 'get', правда, правильно? Будет ли обработан этот «пост»? –

+0

Ах спасибо! И да, я переключу его на 'get', я думаю, что я изменил его на' post', пытаясь исправить эту проблему. – nnyby

+0

Если это решение действительно сработало для вас, можете ли вы принять ответ? :) –

0

Я пробовал решение выше, но он не работал. Я получил:

ArgumentError: 
    unknown keyword: provider 

кажется, что RSpec теперь требует параметр params. Соответствующий вызов выглядит следующим образом:

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

Надеюсь, это поможет!

Смежные вопросы