打印Rails测试名称以找到最慢的测试

时间:2014-12-03 16:35:12

标签: ruby-on-rails unit-testing minitest

我想根据this博文发现我的测试套件中哪些测试最慢。这是代码的缩小版本:

# test/test_time_tracking.rb
module TestTimeTracking
  class ActiveSupport::TestCase
    setup    :mark_test_start_time 
    teardown :record_test_duration

    def mark_test_start_time
      @start_time = Time.now
    end

    def record_test_duration
      puts "Test class: #{self.class.name}"
      puts "Duration:   #{Time.now - @start_time}"
    end
  end
end

# test/test_helper.rb
require 'test_time_tracking'
include TestTimeTracking
# ...

有没有办法在安置或拆解期间打印出测试名称?在博客文章中,他们在拆解块中调用name属性,但这会在我的情况下引发错误。我还试过@name@method_name但没有成功。

我在默认的Rails测试框架之上使用shoulda-contexts gem。我知道我可以使用rake test TESTOPTS=-v获取测试名称和持续时间,但是我必须运行另一个脚本来解析输出。

3 个答案:

答案 0 :(得分:4)

使用minitest-reporters。本页提供了安装指南。 在配置后使用rspec记者。即在你的test_helper.rb文件中写

Minitest::Reporters.use! [Minitest::Reporters::SpecReporter.new()]

然后运行测试。这个&#l; ll格式输出如下: enter image description here

您可以查看每次测试所花费的时间。

答案 1 :(得分:1)

def record_test_duration
  puts "Test class: #{self.class.name}"
  puts "Test method: #{self.method_name}"
  puts "Duration:   #{Time.now - @start_time}"
end

self.method_name将打印当前的测试方法名称

答案 2 :(得分:0)

导轨 5

bin/rails test -v

它会打印如下内容:

SimpleTest#test_: Simple should be a success.  = 0.26 s = .                                                                                                                                                
SimpleTest#test_: Simple should be a failure.  = 0.23 s = .