Rspec没有在Linux中加载ControllerMacros模块(但在OS X上很好)

我在使用Devise和Rspec的Rails应用程序中编写了一些控制器测试。 按照本指南 ,我在/ spec / support /目录中创建了一个controller_macros.rb 。 在同一目录中还有一个devise.rb文件,其中包含:

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

spec_helper.rb文件中需要这两个文件,使用以下行:

 Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

现在这里有点奇怪 :这种方法在OS X笔记本电脑上运行良好,但在我的Linux桌面上失败了。 它们都使用相同的RVM设置,相同的gemsets,相同的一切。

我在Linux中运行测试时得到的错误是:

 uninitialized constant ControllerMacros (NameError) 

显然, controller_macros.rb模块无法在Linux中加载。 我已经看到SO答案表明config.extend可以更改为config.include ,但这并不能解决问题。

我可以看到的任何想法或我可以测试什么来帮助隔离问题?

我正在使用Rails 4.1.8和Rspec 3.1.7。

我通过添加来解决这个问题

 require Rails.root.join("spec/support/macros/controller_macros.rb") 

到我的spec / support / devise.rb文件的顶部

我也在努力解决这个问题。 答案只是不适合我。 这就是我所做的(Ubuntu,Rails 4,Rspec 3):

spec/rails_helper.rb

 #  env stuff require 'spec_helper' require 'rspec/rails' require 'devise' require 'support/controller_macros' #  some non-devise stuff RSpec.configure do |config| #  some more non-devise stuff config.include Devise::TestHelpers, type: :controller config.include ControllerMacros, type: :controller end 

spec/support/controller_macros.rb

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

students_controller.rb

 require "rails_helper" describe StudentsController, type: :controller do before do login_user end describe "GET index" do it "has a 200 status code" do get :index response.code.should eq("200") end end end