Po Railscast on Devise and OmniAuth Mam wdrożyła OmniauthCallbacksController < Devise::OmniauthCallbacksController
który zawiera jedną metodę, aby obsłużyć zwrotnego OmniAuth:rspec: Test przekierowania w Devise :: OmniauthCallbacksController podklasy
def all
user = User.from_omniauth(request.env["omniauth.auth"])
if user.persisted?
sign_in_and_redirect user
else
session["devise.user_attributes"] = user.attributes
redirect_to new_user_registration_url
end
end
alias_method :facebook, :all
routes.rb:
devise_for :users, controllers: {omniauth_callbacks: "omniauth_callbacks", :sessions => "sessions" }
Chciałbym to spersonalizować, więc próbuję przetestować go za pomocą RSpec. Pytanie brzmi: jak przetestować tę metodę i przekierowania?
Jeśli w specyfikacji zamieściłem user_omniauth_callback_path(:facebook)
, nie narzeka ona na nieistnienie trasy, ale nie wydaje się, że tak naprawdę wywołuje tę metodę.
Zgodnie z this answer "testy kontrolera wykorzystują cztery czasowniki HTTP (GET, POST, PUT, DELETE), niezależnie od tego, czy kontroler jest restestowany." Próbowałem get user_...
itd., Ale tutaj narzeka, że trasa nie istnieje. I rzeczywiście, jeśli robię rake routes
to widać nie ma czasownik HTTP dla tej trasy:
user_omniauth_callback [BLANK] /users/auth/:action/callback(.:format) omniauth_callbacks#(?-mix:facebook)
można zobaczyć, co mi brakuje?
EDIT
Więc po this question jeden sposób wywołania metody jest:
controller.send(:all)
Jednak ja następnie uruchomić do tego samego błędu, że pytający wpadł:
ActionController::RackDelegation#content_type delegated to @_response.content_type, but @_response is nil
Perfect. Pomocna na wielu poziomach, nie mówiąc o tym, że myślałem o tym jako o specyfikacji kontrolera, a nie o funkcji. Bardzo doceniane! –
Cieszę się, że mogę Ci pomóc! To doprowadziło mnie do kolan przez półtora dnia. Cieszę się, że ktoś może skorzystać z mojej frustracji! Czy składnia była daleko? Jeśli tak, edytuj za pomocą właściwego rozwiązania. Dzięki! –
Składnia działa idealnie. Jedyną zmianą, jaką wprowadziłem, było wciągnięcie trochę w spec_helper.rb po [tej odpowiedzi] (http://stackoverflow.com/a/9915796/1450420), którą znalazłem dzięki twojej odpowiedzi. –