Rspec 未在 Linux 中加载 ControllerMacros 模块(但在 OS X 上没问题)

Rspec not loading ControllerMacros module in Linux (but fine on OS X)

我在使用 Devise 和 Rspec 的 Rails 应用程序中编写了一些控制器测试。在 this guide 之后,我在 /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

# <snip> env stuff

require 'spec_helper'
require 'rspec/rails'
require 'devise'
require 'support/controller_macros'

# <snip> some non-devise stuff

RSpec.configure do |config|

  # <snip> 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