从Ruby中的文件名动态创建自动加载命令
我正在用ruby,rspec,水豚和硒测试一个web应用程序,我遇到了一个uninitialized constant ActiveAdminLoginPage
异常,我不知道该如何解决。从Ruby中的文件名动态创建自动加载命令
在spec_helper.rb我正在要求如下:
Dir[File.join(Dir.pwd, 'spec/page_objects/**/*.rb')].each { |f| require f }
我有2个班
spec/page_objects/products/active_admin_login_page.rb
module Products
class ActiveAdminLoginPage < ::ActiveAdminLoginPage
...
end
end
继承
spec/page_objects/active_admin_login_page.rb
遗憾的是子类的父之前加载类。
如何从目录中的所有文件名动态创建autoload命令? 我想换掉这个命令:
Dir[File.join(Dir.pwd, 'spec/page_objects/**/*.rb')].each { |f| require f }
与自动加载命令。
如何使用require
在需要它的文件中加载依赖项?
require
只加载一次文件,所以你不应该遇到任何副作用。
,或者甚至更好,你可以使用auto_load
,它使用require
引擎盖下,但它确实是一个更聪明的方式
autoload :ActiveAdminLoginPage, 'active_admin_login_page'
我知道这会工作,但我更喜欢自动加载文件,而不是添加需要手动。如果我没有找到自动加载的解决方案,那么我会采用这种方法,但在我想尝试获取文件自动加载之前。 –
你知道如何从'active_admin_login_page'创建符号:ActiveAdminLoginPage吗?由于即时通讯从page_object目录中读取所有文件,我需要动态地执行此操作。 –
你不需要做任何特别的事情。退房http://lifeonubuntu.com/use-rubys-autoload-instead-of-require-for-your-ruby-and-rails-apps/ –
你从自动加载期待什么行为?它会自动基于缺少的常量加载文件?你很可能需要编写一个“包装器”,因为这个功能不是内置的。问题是你如何期望它的行为。典型地,你通过'require(_relative)'加载每个文件的所有依赖关系。要自动完成这项工作,您需要使用相对严格的命名约定来计算要加载的文件。 – insider