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