9

已经看过这个问题,这或多或少反映了我目前如何运行我的整个套件。

此外,我还设置了以下 rake 任务:

Rake::TestTask.new do |t|
  t.name = "spec:models"
  t.libs << "test"
  t.pattern = "spec/models/*_spec.rb"
end

但是我注意到当我使用 运行它时time rake spec:models,它在大约 2.36 秒内完成。如果我在该目录中运行所有单独的测试ruby /path/to/spec.rb(目前所有测试都与 ActiveRecord 隔离 - 还没有持久性,所以超级快),它们的累积总用户时间为 2.36 秒,但我也注意到每个文件需要 0.4 个用户从开始到结束执行的秒数,MiniTest 报告的实际“测试”时间要快得多(这样我的整个套件,在加载依赖项后,应该在不到 0.15 秒的时间内执行,而不是 2.36 秒)。

示例(对于一个规范文件):

Started

11/11:         100% |======================================| Time: 00:00:00

Finished in 0.02223s
11 tests, 15 assertions, 0 failures, 0 errors, 0 skips
ruby path/to/spec.rb  0.43s user 0.06s system 88% cpu 0.559 total

我怀疑 Rake 会在每次测试执行之间重新加载库,这是额外时间的原因。无论如何我可以验证这一点,或者在不使用 Rake 的情况下运行我的整个套件吗?

顺便说一句,当我之前说“用户时间”时,我指的是通过time在我的 ruby​​ 命令前面输出的第一个数字来运行单个测试文件,所以time ruby /path/to/spec.rb=ruby path/to/spec.rb 0.43s user 0.06s system 88% cpu 0.559 total

4

2 回答 2

8

spec.rb在项目的顶级目录中创建一个文件:

$:<<'spec'  # add to load path
files = Dir.glob('spec/**/*.rb') 
files.each{|file| require file.gsub(/^spec\/|.rb$/,'')}  

运行:

ruby spec.rb

如果这对您有用,您可以根据需要重命名spec.rb文件,或将其移动到更好的位置,或根据需要更改加载路径等。

于 2012-05-17T07:52:29.693 回答
1

这将在文件名末尾带有 _spec.rb 的 spec 目录和子目录中运行任何测试:

ruby -Itest spec/**/*_spec.rb
于 2012-05-15T14:03:35.817 回答