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)
答案 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