2016-03-14 64 views
0

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) 

回答

4

你可以使用rspec --profile N,這會向您顯示前N個最慢的示例。

+0

是的,我可以,但是如果我在我的測試套件中有100個示例,它不會幫助我實現我想要的。 – fabersky

+0

@fabersky你可以把任何數字與--profile一起配置N個例子,查看 –

+0

好的。我低估了,因爲在你的第一個答案中,你沒有把「--profile」 – fabersky

2

快速解決方案請參閱@ maximf的答案。對於另一種解決方案,你可以編寫你自己的rspec格式化器,這會讓你更好地控制你正在測量的內容。

例如,extnding的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

0

而不是做rspec --profile N每次我們運行規格(如@maximf說),我們可以把它添加到我們的RSpec的配置:

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