rspec & devise test helpers

后端 未结 4 1411

According to this from the devise wiki I should be able to use a login_user helper method in my controller tests. Accordingly I have the following within the spec directory:

相关标签:
4条回答
  • 2020-12-15 06:26

    Forget to confirm if your app is not confirmable. Your code should look like

    module ControllerMacros
      def login_user
        before(:each) do
          @request.env["devise.mapping"] = Devise.mappings[:user]
          user = FactoryGirl.create(:user)
          #user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the confirmable module
          sign_in user
        end
      end
    end
    
    0 讨论(0)
  • 2020-12-15 06:31

    I imagine there are a couple of problems with this approach. First is that you're using request specs, not controller specs, so the login_user method is not made available by config.extend ControllerMacros, :type => :controller. Second, even if you are able to include the method it most likely won't work anyway, since the Devise test helpers are specifically written for controller/view tests, not integration tests.

    Take a look at David Chelimsky's answer to this SO question, which may be of help.

    0 讨论(0)
  • 2020-12-15 06:39

    I can't answer for sure... but the code smell for me is the "before(:each)" defined inside the helper. why don't you try:

    #support/controller_macros.rb
    module ControllerMacros    
      def login_user
        @request.env["devise.mapping"] = Devise.mappings[:user]
        @user = Factory.create(:user)
        sign_in @user
      end
    end
    

    and

    #requests/some_spec.rb
    require 'spec_helper'
    describe "GET /guides/edit" do
      before(:each) do
        login_user     
      end
    end
    

    and if that fails - maybe it just can't find @request - in which case, pass it as a variable to login_user

    Edit:

    Looks like you might need to include the devise test helpers. The rdoc says you should have this file:

    # spec/support/devise.rb
    RSpec.configure do |config|
      config.include Devise::TestHelpers, :type => :controller
    end
    

    Not sure if that differs from how you've already got it in spec_helper.rb ... looks pretty similar to me.

    0 讨论(0)
  • 2020-12-15 06:39

    I have same issue with Rails 3.0.10 rspec 2.6.0 devise 1.3.4 spork-0.9.0.rc9 on my controller specs, i have changed config. extend to config.include and its work !

    0 讨论(0)
提交回复
热议问题