我对此目录结构有一系列玩具问题:
规范文件& 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__
将返回我的帮助程序文件的名称(即:spec_helper.rb),而不是我的规范文件(即:001-problem_spec.rb)。
有没有办法获取调用require 'spec_helper'
的文件的名称,然后在我的spec_helper文件中使用该文件名,以便spec_helper可以要求spec文件的正确lib文件?
答案 0 :(得分:0)
我通过创建自己的目录结构解决了问题。 您可以遵循相同的规则,这可能会对您有所帮助。
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
。