包含用于 rspec 测试的控制器宏的问题 /w devise

Trouble including controller macros for rspec tests /w devise

我收到一个未初始化的常量 ControllerMacros (NameError),可能与这些问题类似 (1, , ). I must be screwing up the syntax while trying to include controller macros so I can login with devise and pass controller tests in rspec. Link to GitHub repoRails 4.1.8 和 Ruby 2.1.2

spec/controllers/static_pages_controller_spec.rb

require 'rails_helper'


describe StaticPagesController, :type => :controller do
  describe "GET #index" do
    it "responds successfully with an HTTP 200 status code" do
      login_user
      get :index
      expect(response).to be_success
      expect(response).to have_http_status(200)
    end

    it "renders the index template" do
      login_user
      get :root
      expect(response).to render_template("index")
    end
  end

end

spec/support/controller_macros.rb

module ControllerMacros
  def login_admin
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:admin]
      admin = FactoryGirl.create(:admin)
      sign_in :user, admin # sign_in(scope, resource)
    end
  end

  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

spec/rails_helper

添加了行
   #helps avoid authentication error during rspec:
    config.include Devise::TestHelpers, :type => :controller
    config.include ControllerMacros, :type => :controller

看来您可能需要将 require 'support/controller_macros' 添加到 rails_helper.rb 文件的顶部。 RSpec 默认情况下不会包含此目录。

这对我有用。

spec/support/devise.rb

require 'devise'

RSpec.configure do |config|
 config.include Devise::TestHelpers, :type => :controller
 config.extend ControllerMacros, :type => :controller
end

还要确保此行在 rails_helper.rb

中取消注释
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }