按照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
答案 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'