在rspec测试中加载和使用设计宏

时间:2015-03-05 15:27:15

标签: ruby-on-rails-4 rspec devise

按照https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29的说明,我在文件spec/support/rspec_macros.rb中设置了一些宏:

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

  def login_user
    before(:each) do
      @request.env["devise.mapping"] = Devise.mappings[:user]
      sign_in FactoryGirl.create(:user)
    end
  end
end

(请注意,在我的应用程序中,“admin”是一个角色 - 角色4 - 任何用户都可以被分配,是的,一旦我开始工作,我会干掉它并摆脱魔法数)。

但是,将login_admin放入我的规范不起作用:它无法看到login_admin

所以,按照ControllerMacros cannot be seen in RSpec的建议,我添加了

config.include ControllerMacros, :type => :controller

到我的spec_helper.rb文件。现在ControllerMacros是一个未初始化的常量,所以按照rspec not working with devise user authentication的建议添加:

require 'support/controller_macros'

到我的spec_helper文件,我发现我回到了undefined local variable or method login_admin

开始的位置

帮助!如何我到达宏?是否有一个地方可以记录整个过程?

有关信息,我的spec_helper文件的相关位是:

要求'rubygems' 要求'factory_girl' 要求'support / controller_macros'

要求'设计'

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

我的spec文件是:

require 'rails_helper'

RSpec.describe UsersController, :type => :controller do

  describe "GET show" do
    login_admin

    it "returns http success" do
      user = User.first
      get :show, id: user[:id]
      expect(response).to be_success
    end
  end
end

1 个答案:

答案 0 :(得分:0)

确保 @Autowired protected SessionFactory sessionFactoryFull; @Autowired protected SessionFactory sessionFactoryTrial; protected Class<T> persistentClass; 加载文件夹中的文件。 如果没有将该行添加到rails_helper.rb

spec/support

rails_helper.rb之后,将设计配置移至Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }`

require 'rspec/rails'