我有一个测试类的名称(作为字符串),例如."Reports::SalesReportTest"。如果不将所有测试文件加载到内存中,我如何才能找到Ruby会加载哪个文件才能使测试类工作呢?
要重新定义,是否有一个函数以类/模块名称(作为字符串),并返回需要加载的文件路径以使类/模块工作?
发布于 2018-03-15 07:36:11
首先,类定义可以跨越多个文件。其次,可以动态创建类,例如使用eval。
如果您知道应用程序总是以这样一种样式编写,即每个类都在一个文件中完全定义,并且每个定义都遵循某些样式规则(例如,每个class CLASSNAME从自己的一行开始),则可以读取应用程序目录中的所有文件并扫描类定义。不要忘记,可能会有用=begin和=end注释掉的行,您将不得不忽略这些行。
发布于 2018-03-15 15:15:49
考虑到您正在使用rails,您可以确定它预期文件的位置(或者至少rails将在哪里查找),但这并不意味着它的存在。例如:
class_name = "Reports::SalesReportTest".underscore
potential_paths = ActiveSupport::Dependencies.autoload_paths.map do |path|
File.join(path.to_s,"#{class_name}.rb")
end这将列出rails将尝试从其中加载文件的所有位置。
如果您想知道文件是否存在,那么您也可以问ruby:
class_name = "Reports::SalesReportTest".underscore
loadable_paths = ActiveSupport::Dependencies.autoload_paths.map do |path|
File.exist?(File.join(path.to_s,"#{class_name}.rb"))
endhttps://stackoverflow.com/questions/49291205
复制相似问题