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

And*_*lle 5 ruby selenium automated-tests rspec autoload

我正在测试一个带有ruby,rspec,capybara和selenium的web应用程序,我遇到了一个uninitialized constant ActiveAdminLoginPage我不知道如何解决的异常.

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

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

我有2节课

spec/page_objects/products/active_admin_login_page.rb  

module Products
  class ActiveAdminLoginPage < ::ActiveAdminLoginPage
  ...
  end
end 
Run Code Online (Sandbox Code Playgroud)

继承自

spec/page_objects/active_admin_login_page.rb
Run Code Online (Sandbox Code Playgroud)

不幸的是,子类在父类之前加载.

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

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

使用自动加载命令.

Mih*_*scu 3

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

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

或者,更好的是,您可以使用,它在幕后auto_load使用,但它以更智能的方式进行require

autoload :ActiveAdminLoginPage, 'active_admin_login_page'
Run Code Online (Sandbox Code Playgroud)