在 rails 4 应用程序中需要 Rspec 中的模块
Requiring module in Rspec in rails 4 application
我正在尝试在 Rspec 中包含其他 Devise 助手,但收到以下错误:
rails_helper.rb:56:in `block in <top (required)>': uninitialized constant ControllerMacros (NameError)
rails_helpers.rb 中的第 56 行是我拥有的 config.include ControllerMacros 行。我试图用其他 SO 帖子中发布的解决方案来解决这个问题,但似乎无法解决这个问题。我知道这可能是一个需要顺序的问题,但无法确定正确的顺序。
rails_helper.rb
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/rails'
require 'capybara/rspec'
require 'devise'
ctiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.include Capybara::DSL
config.include Devise::TestHelpers, :type => :controller
config.include ControllerMacros, :type => :controller
end
spec/support/controller_macros.rb
module ControllerMacros
def login_business
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:business]
business = FactoryGirl.create(:business)
buisness.confirm!
sign_in business
end
end
end
spec/business_account_controller_spec.rb
需要 'spec_helper'
需要 'rails_helper'
describe BusinessAccountController do
login_business
it "should have current user" do
expect(subject).to_not be_nil
end
end
您需要 require
它在您的 rails_helper
中。我将所有模块放在 /spec/support
中,然后将 Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
放在 rails_helper
的顶部
我正在尝试在 Rspec 中包含其他 Devise 助手,但收到以下错误:
rails_helper.rb:56:in `block in <top (required)>': uninitialized constant ControllerMacros (NameError)
rails_helpers.rb 中的第 56 行是我拥有的 config.include ControllerMacros 行。我试图用其他 SO 帖子中发布的解决方案来解决这个问题,但似乎无法解决这个问题。我知道这可能是一个需要顺序的问题,但无法确定正确的顺序。
rails_helper.rb
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'capybara/rails'
require 'capybara/rspec'
require 'devise'
ctiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.include Capybara::DSL
config.include Devise::TestHelpers, :type => :controller
config.include ControllerMacros, :type => :controller
end
spec/support/controller_macros.rb
module ControllerMacros
def login_business
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:business]
business = FactoryGirl.create(:business)
buisness.confirm!
sign_in business
end
end
end
spec/business_account_controller_spec.rb 需要 'spec_helper' 需要 'rails_helper'
describe BusinessAccountController do
login_business
it "should have current user" do
expect(subject).to_not be_nil
end
end
您需要 require
它在您的 rails_helper
中。我将所有模块放在 /spec/support
中,然后将 Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
放在 rails_helper