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
我在使用 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