单一规格持续时间

时间:2016-03-14 12:28:35

标签: ruby-on-rails ruby rspec capybara

RSpec中是否有办法显示每个测试持续时间而不仅仅是总套件持续时间?

现在我们有了

  

在7分31秒内完成(文件加载时间为4.71秒)

但我想要像

这样的东西
User accesses home and
 he can sign up (finished in 1.30 seconds)
 he can visit profile (finished in 3 seconds)
 .
 .
 .
Finished in 7 minutes 31 seconds (files took 4.71 seconds to load)

3 个答案:

答案 0 :(得分:5)

您可以使用rspec --profile N,这将显示前N个最慢的示例。

答案 1 :(得分:2)

要获得快速解决方案,请参阅@ maximf的答案。对于替代解决方案,您可以编写自己的rspec格式化程序,这样可以更好地控制您测量的内容。

例如,扩展rspec的基本文本格式化程序:

RSpec::Support.require_rpec_core "formatters/base_text_formatter"
module RSpec::Core::Formatters
  class TimeFormatter < BaseTextFormatter
    Formatters.register self, :example_started, :example_passed

    attr_accessor :example_start, :longest_example, :longest_time

    def initialize(output)
      @longest_time = 0
      super(output)
    end

    def example_started(example)
       @example_start = Time.now
       super(example)
    end

    def example_passed(example)
       time_taken = Time.now - @example_start
       output.puts "Finished #{example.example.full_description} and took @{Helpers.format_duration(time_taken)}"
       if @time_taken > @longest_time
         @longest_example = example
         @longest_time = time_taken
       end
       super(example)
     end

     def dump_summary(summary) 
       super(summary)
       output.puts 
       output.puts "The longest example was #{@longest_example.example.full_Description} at #{Helpers.format_duration(@longest_time)}"
     end
   end
end

请注意,这只会记录传递的示例的时间,但您可以添加一个example_failed无法执行类似操作,它也只能用于RSpec 3.这是基于我在自己的格式化程序上的工作:https://github.com/yule/dots-formatter < / p>

答案 2 :(得分:0)

每次我们运行规范(如@maximf所说),我们可以将它添加到我们的RSpec配置中,而不是rspec --profile N

RSpec.configure do |config|
 config.profile_examples = 10
end