Suivre le Railscast sur Devise et Omniautuut J'ai mis en place un routes.rb: p> omniauthcallbackstontroller
ActionController::RackDelegation#content_type delegated to @_response.content_type, but @_response is nil
3 Réponses :
Vous devrez faire trois choses pour que cela accomplie.
Voici une solution possible, entrée dans la spécification elle-même (Spécification / fonctionnalité / login_spec.rb par exemple). . . P>
let(:current_user) { FactoryGirl.create(:user) } before do OmniAuth.config.test_mode = true OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new({ provider: :facebook, uid:'12345', info: { name: "Joe" } }) User.stub(:from_omniauth).and_return(current_user) end
Parfait. Utile à de nombreux niveaux, notamment que je pensais à cela comme une spécification de contrôleur plutôt que d'une spécification de fonctionnalité. Très appréciée!
Heureux de vous aider! Cela m'a amené à mes genoux pendant une journée et demie. Je suis content que quelqu'un d'autre puisse bénéficier de ma frustration! La syntaxe était-elle loin? Si oui, veuillez éditer avec la solution correcte. Merci!
La syntaxe a parfaitement fonctionné. Le seul changement que j'ai fabriqué était de tirer un peu dans Spec_Helper.rb après Cette réponse que j'ai trouvée grâce à votre réponse.
Ahhh, intéressant. J'ai placé la méthode de sorte que je n'aurais donc pas besoin d'un résultat réel sauvegardé, mais c'est probablement une représentation plus précise. Je suppose en définissant l'env.Request ["omniauth.env"], vous pouvez attraper un utilisateur de la persistance et avoir besoin de l'encombrement, non? En outre, déplacer la configuration du test Omniauth dans un SPEC_HELPER est définitivement plus sec. Merci pour la mise à jour!
Le seul changement que j'ai fait était en train de tirer un peu plus dans SPEC_HELPER.RB. Je n'ai pas essayé de définir le demande.env ["omniauth.auth"] code> dans un bloc avant le bloc. J'étais assez heureux que c'était sec et travaille alors je pensais qu'il vaut mieux arrêter de fumer pendant que j'étais devant!
Je ne l'ai pas touché dans quelques années, si malheureusement, non pas ajusté.
Je suis problémique de problème pour Withing RSPEC code> pour
omniauthcallbackscontroller code>, faites des recherches sur ceci et cela fonctionne pour moi. Voici mes codes, si quelqu'un a trouvé nécessaire. Les tests sont pour un chemin heureux et il devrait fonctionner pour la version d'actualité de
RSPEC, par exemple. 3.x code>
Si vous frappez cela et que vous exécutez RSPEC 3.4 strong> Cet exemple doit fonctionner pour vous: describe Users::OmniauthCallbacksController, type: :controller do
let(:current_user) { FactoryGirl.create(:user) }
before do
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:your_oauth_provider_here] = OmniAuth::AuthHash.new(
provider: :your_oauth_provider_here,
uid: rand(5**10),
credentials: { token: ENV['CLIENT_ID'], secret: ENV['CLIENT_SECRET'] }
)
request.env['devise.mapping'] = Devise.mappings[:user]
allow(@controller).to receive(:env) { { 'omniauth.auth' => OmniAuth.config.mock_auth[:your_oauth_provider_here] } }
allow(User).to receive(:from_omniauth) { current_user }
end
describe '#your_oauth_provider_here' do
context 'new user' do
before { get :your_oauth_provider_here }
it 'authenticate user' do
expect(warden.authenticated?(:user)).to be_truthy
end
it 'set current_user' do
expect(current_user).not_to be_nil
end
it 'redirect to root_path' do
expect(response).to redirect_to(root_path)
end
end
end
end