【问题标题】:Ruby, using a spec helper file to call "require_relative"Ruby,使用规范帮助文件调用“require_relative”
【发布时间】:2015-06-06 19:02:27
【问题描述】:

我对这个目录结构有一些玩具问题:

    • 001-problem.rb
    • 002-another_problem.rb
    • 003-more_problems.rb
    • 等等……
  • 规格
    • 001-problem_spec.rb
    • 002-another_problem_spec.rb
    • 003-more_problems_spec.rb
    • 等等……

spec 文件和 lib 文件被命名为相互匹配。

在规范文件中,假设它来自 001-problem_spec.rb,我可以照常进行:require_relative '../lib/001-problem_spec.rb'

但这有点过时了,因为我计划创建几十个文件。我想做一个模板。所以我在每个文件的顶部尝试了这个:

spec_file_basename = File.basename(__FILE__)
cut_here = spec_file_basename.index('_spec')
lib_file_basename = spec_file_basename[0...cut_here]
file = "../lib/#{lib_file_basename}.rb"
require_relative file

但这相当长且重复。我想将类似这样的代码块放入一个 spec_helper 文件中,以便我的每个规范文件都可以像这样引用它:
require 'spec_helper'。显然,仅仅将前面的代码块粘贴到 spec_helper 文件中是行不通的,因为__FILE__ 将返回我的 helper 文件的名称(即:spec_helper.rb),而不是我的规范文件(即: 001-problem_spec.rb)。

有没有办法获取调用 require 'spec_helper' 的文件的名称,然后在我的 spec_helper 文件中使用该文件名,以便 spec_helper 可以为 spec 文件要求正确的 lib 文件?

【问题讨论】:

    标签: ruby require


    【解决方案1】:

    我已经通过创建自己的目录结构解决了。 您可以按照相同的方式进行操作,这可能会对您有所帮助。

    1) problem/spec/t_spec.rb

    require './spec_helper'
    

    2)problem/spec_helper.rb

    require './t_file_helper'
    spec_file_basename = TFile.basename.split('/').last
    puts "===spec_file_basename===#{spec_file_basename}====="
    

    3)problem/t_file_helper.rb

    class TFile 
      def self.basename
        eval('$0')
      end
    end  
    

    执行ruby spec/t_spec.rb

    • 输出:===spec_file_basename===t_spec.rb=====

    所以现在您可以像在您的 spec_helper.rb 中一样执行您的代码。因为现在我们有spec_file_basename

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2011-11-07
      • 1970-01-01
      • 2011-01-10
      • 2016-04-26
      • 1970-01-01
      相关资源
      最近更新 更多