我收到一个未初始化的常量 ControllerMacros (NameError),可能与这些问题类似( 1 、 2 、 3 )。我在尝试包含 Controller 宏时一定搞砸了语法,这样我就可以使用 devise 登录并通过 rspec 中的 Controller 测试。 Link to GitHub repo 。 Rails 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
最佳答案
这对我有用。
规范/支持/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 }
关于ruby-on-rails - 包含用于 rspec 测试/w 设备的 Controller 宏的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32376339/