52 votes

Pourquoi mon RSpec ne charge-t-il pas Devise :: Test :: ControllerHelpers?

Je suis à l'aide de Rails à 5, et de Concevoir 3.5.1.

En passant par une belle (plus) livre sur la création/test d'une API, qui utilise Concevoir l'authentification. Il a été écrit avant les Rails 5, j'ai donc choisi de ne pas utiliser la nouvelle api-version.

Voici mon test...

#/spec/controllers/api/v1/users_controller_spec.rb    

require 'rails_helper'

describe Api::V1::UsersController, :type => :controller do
    before(:each) { request.headers['Accept'] = "application/vnd.marketplace.v1" }
    describe "GET #show" do
        before(:each) do
            @user = FactoryGirl.create :user
            get :show, params: {id: @user.id}, format: :json
        end
        it "returns the information about a reporter on a hash" do
            user_response = JSON.parse(response.body, symbolize_names: true)
            expect(user_response[:email]).to eql @user.email
        end
        it { should respond_with 200 }
    end
end

Et voici un de tout à fait inattendu RSpec erreur

Devise::MissingWarden:
       Devise could not find the `Warden::Proxy` instance on your request environment.
       Make sure that your application is loading Devise and Warden as expected and that the `Warden::Manager` middleware is present in your middleware stack.
       If you are seeing this on one of your tests, ensure that your tests are either executing the Rails middleware stack or that your tests are using the `Devise::Test::ControllerHelpers` module to inject the `request.env['warden']` object for you.

J'ai donc rendez-vous ici - http://www.rubydoc.info/gems/devise/Devise/Test/ControllerHelpers

et j'ai essayé cette -> inclure Concevoir::Test::ControllerHelpers

ce qui ne l'aide pas parce que le fichier controller_helpers.rb est nulle part dans mon projet

Qu'ai-je manqué ici?

Merci

112voto

lest Points 1526

Vous pouvez ajouter ce qui suit à votre rails_helper :

 RSpec.configure do |config|
  config.include Devise::Test::ControllerHelpers, type: :controller
end
 

Ceci inclura les modules Devise::Test::ControllerHelpers dans toutes les spécifications :controller .

11voto

Angel Huezo Points 131

Dans le spec_helper.rb ajouter:

 config.include Devise::Test::ControllerHelpers, :type => :controller
 

1voto

Chloe Points 2737

MiniTest, Rails 4

Cela fonctionne pour la vanille Rails 4 MiniTest

test\controllers\users_controller_test.rb
 require 'test_helper'

class UsersControllerTest < ActionController::TestCase
  include Warden::Test::Helpers
  include Devise::Test::ControllerHelpers

  setup do
    # https://github.com/plataformatec/devise/wiki/How-To:-Test-with-Capybara
    # @user = users(:admin)
    # sign_in @user
  end

  teardown do
    Warden.test_reset!
  end

  test "login as admin" do
    @user = users :admin
    sign_in @user
    get :dashboard
    assert_redirected_to admin_dashboard_path
  end

end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X