从 Ruby 中的文件名动态创建自动加载命令

Dynamically create autoload command from filenames in Ruby

我正在使用 ruby、rspec、capybara 和 selenium 测试一个 Web 应用程序,我 运行 遇到一个我不知道如何处理的 uninitialized constant ActiveAdminLoginPage 异常解决。

在 spec_helper.rb 中,我需要以下内容:

Dir[File.join(Dir.pwd, 'spec/page_objects/**/*.rb')].each { |f| require f }

我有 2 个 classes

spec/page_objects/products/active_admin_login_page.rb  

module Products
  class ActiveAdminLoginPage < ::ActiveAdminLoginPage
  ...
  end
end 

继承自

spec/page_objects/active_admin_login_page.rb

不幸的是,子 class 在父 class 之前加载。

如何从目录中的所有文件名动态创建自动加载命令? 我想替换此命令:

Dir[File.join(Dir.pwd, 'spec/page_objects/**/*.rb')].each { |f| require f }

使用自动加载命令。

如何使用 require 将您的依赖项加载到需要它的文件中?

require 只加载一次文件,因此您不会遇到任何副作用。

或者,更好的是,您可以使用 auto_load,它在后台使用 require,但它以更智能的方式实现

autoload :ActiveAdminLoginPage, 'active_admin_login_page'