在循环内调用`require`只执行一次

时间:2012-12-11 00:06:00

标签: ruby require

我有一个脚本可以使用require在目录中运行所有测试;我这样做:

Dir.files.each
...

然后

require 'path'
...

我尝试使用另一个循环来运行这些测试几次,传递不同的参数。我在数组中有我的参数,然后我遍历数组,然后运行与上面相同的代码来运行目录中的所有测试。在这个循环中,我打印一行:

puts executing tests for a[i]

,下一行是运行测试集的require。 问题是打印执行例如十次(一起打印十行),但require仅在最后运行,仅传递数组的最后一个元素。我尝试了不同的语句,它们都运行良好,所以我不相信它是循环中的问题;我认为这是require。我试过了load,但没有看到任何区别。 'exec'只运行集合中的第一个测试。有什么想法吗?

更多细节:

感谢回复!系统命令更接近我想要的 - 它为我运行所有测试。

我有一个我正在尝试做的例子。 当我在传递特定参数'a'后运行脚本时,我得到以下结果:

#### Run all tests for 'a' ####
Loaded suite
............................
Finished in 220.123 seconds

如果我把我的参数放在一个数组中,例如。 ar = ['a','b','c','d'] 我得到了

#### Run all tests for 'a' ####
#### Run all tests for 'b' ####
#### Run all tests for 'c' ####
#### Run all tests for 'd' ####
Loaded suite 
............................
Finished in 220.123 seconds

即。测试仅针对最后一个选项运行(d)

如果我使用'system',每个单独的文件都会单独运行 - 这使得很难通过结果对100次测试进行几次不同的运行。

代码段是:

  for i in 0 .. @ar.length-1 do
      puts'##  Running : '+ @ar[i] + '  ##' 
      Dir.entries('./suite_dir').each do | file |
          require './suite_dir/'+ file
      end
  end

2 个答案:

答案 0 :(得分:1)

不要像这样使用require,它不是可执行的......只能使用一次。

来自 http://www.ruby-doc.org/core-1.9.3/Kernel.html#method-i-require

  

require(name)→真或假

     

加载给定名称,成功时返回true,如果成功则返回false   功能已加载。

答案 1 :(得分:0)

您可以使用类似的内容来运行目录中的所有文件:

Dir.foreach(path) do |file|
  puts "Testing #{file}"
  system(path+file)
end