Ich habe einen Controller, auf den nicht direkt zugegriffen werden kann, sondern auf traditionelle REST-Weise, aber nur über eine bestimmte URL.Testen einer RSpec-Controller-Aktion, auf die nicht direkt zugegriffen werden kann
Normalerweise bin ich es gewohnt, get und post in meinen Controller-Spezifikationen zu verwenden, um Controller-Aktionen aufzurufen. Gibt es eine Möglichkeit, meinen Controller durch den Besuch einer bestimmten URL zu trainieren?
EDIT:
Hier ist mein Weg ist:
Larzworld::Application.routes.draw do
match '/auth/:provider/callback' => 'authentications#create'
devise_for :users, :controllers => {:registrations => "registrations"}
root :to => 'pages#home'
end
Hier meine spec ist:
require 'spec_helper'
describe AuthenticationsController do
before(:each) do
request.env["omniauth.auth"] = {"provider" => "twitter", "uid" => "12345678"}
end
describe 'POST create' do
it "should find the Authentication using the uid and provider from omniauth" do
Authentication.should_receive(:find_by_provider_and_uid)
post 'auth/twitter/callback'
end
end
end
und hier ist der Fehler, den ich erhalten:
Failures:
1) AuthenticationsController POST create should find the Authentication using the uid and provider from omniauth
Failure/Error: post 'auth/twitter/callback'
No route matches {:action=>"auth/twitter/callback", :controller=>"authentications"}
# ./spec/controllers/authentications_controller_spec.rb:13
Finished in 0.04878 seconds
1 example, 1 failure
Ok, das Ist das, was ich dachte, aber dann schau dir meinen bearbeiteten Post an, wo ich meine Route, meinen Test und meinen Fehler poste. Ich verstehe nicht, warum es nicht auf die richtige Aktion abgebildet wird. – TheDelChop
Siehe meine Bearbeitung. Sie wollen wirklich einen Routing-Test hier, denke ich. – zetetic