Tiếp theo Railscast on Devise and OmniAuth tôi đã thực hiện một OmniauthCallbacksController < Devise::OmniauthCallbacksController
trong đó có một phương pháp duy nhất để xử lý một callback OmniAuth:RSpec: Kiểm tra chuyển hướng trong lập mưu :: OmniauthCallbacksController lớp con
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" }
Tôi muốn tùy chỉnh điều này, vì vậy tôi đang cố gắng kiểm tra nó bằng cách sử dụng RSpec. Câu hỏi đặt ra là làm cách nào để thử nghiệm phương pháp này và chuyển hướng?
Nếu trong spec tôi đặt user_omniauth_callback_path(:facebook)
nó không phàn nàn về tuyến đường không tồn tại, nhưng dường như không thực sự gọi phương thức.
Theo this answer "kiểm tra bộ điều khiển sử dụng bốn động từ HTTP (GET, POST, PUT, DELETE), bất kể bộ điều khiển của bạn có RESTful hay không." Tôi đã thử get user_...
v.v. nhưng ở đây nó phàn nàn rằng tuyến đường không tồn tại. Và thực sự nếu tôi làm rake routes
nó cho thấy không có động từ HTTP cho tuyến đường này:
user_omniauth_callback [BLANK] /users/auth/:action/callback(.:format) omniauth_callbacks#(?-mix:facebook)
Bạn có thể thấy những gì tôi đang thiếu không?
EDIT
Vì vậy, sau this question một cách gọi phương pháp này là:
controller.send(:all)
Tuy nhiên tôi sau đó gặp phải lỗi tương tự mà người hỏi chạy vào:
ActionController::RackDelegation#content_type delegated to @_response.content_type, but @_response is nil
Perfect. Hữu ích trên nhiều cấp độ, không kém phần quan trọng là tôi đã nghĩ về điều này như một đặc tính của bộ điều khiển hơn là một đặc điểm kỹ thuật. Nhiều đánh giá cao! –
Rất vui được trợ giúp! Điều này đưa tôi đến đầu gối của tôi trong một ngày rưỡi. Tôi rất vui vì ai đó có thể hưởng lợi từ sự thất vọng của tôi! Cú pháp có xa không? Nếu có, vui lòng chỉnh sửa với giải pháp đúng. Cảm ơn! –
Cú pháp hoạt động hoàn hảo. Sự thay đổi duy nhất tôi thực hiện đã được kéo một chút vào spec_helper.rb sau [câu trả lời này] (http://stackoverflow.com/a/9915796/1450420) mà tôi tìm thấy nhờ câu trả lời của bạn. –