7
votes

RSPEC: Test Redirects dans le Devise :: Omniauthcallbackscontroller Sous-classe

Suivre le Railscast sur Devise et Omniautuut J'ai mis en place un omniauthcallbackstontroller qui contient une seule méthode pour gérer un rappel Omniauth: xxx pré>

routes.rb: p>

ActionController::RackDelegation#content_type delegated to @_response.content_type, but @_response is nil


0 commentaires

3 Réponses :


5
votes

Vous devrez faire trois choses pour que cela accomplie.

  • Entrez l'environnement de test Omniauth LI>
  • Créer un test Omniauth Mock LI>
  • Stupez votre méthode de_omniauth pour renvoyer un utilisateur li> ul>

    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
    


6 commentaires

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"] 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é.



1
votes

Je suis problémique de problème pour Withing RSPEC pour omniauthcallbackscontroller , 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 xxx


0 commentaires

3
votes

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


0 commentaires