如何以编程方式获取rspec输出错误回溯

时间:2014-07-14 13:57:36

标签: rspec rspec2

我有一个ruby脚本需要执行rspec测试并收集结果。 我正在使用标准的rspec API来实现这个目标:

require 'rspec'
require 'rspec/core'
require 'rspec/core/formatters/json_formatter'
require 'json'

def run_test(test_location)
 config = RSpec.configuration
 json_formatter = RSpec::Core::Formatters::JsonFormatter.new(config.output)
 reporter =  RSpec::Core::Reporter.new(json_formatter)
 config.instance_variable_set(:@reporter, reporter)
 begin
  ::RSpec::Core::Runner.run([test_location,'--format','j'])
  json_formatter.output_hash
 rescue Exception => e
  e.message
 end
end

run_test(<PATH_TO_RSPEC_TEST_SCRIPT>)

现在,当rspec测试中的某些内容失败时,我只能收到错误消息,但我希望从失败的基础rspec测试中获得回溯。有没有办法实现这个目标? 我试过传递参数: - reversetrace或-b到传递给RSpec :: Core :: Runner.run方法的数组但是没有得到很多帮助

提前致谢

1 个答案:

答案 0 :(得分:1)

RSpec::Core::Formatters::JsonFormatter实例中提供了引发异常的任何示例的回溯。无需在参数中添加-b选项。

json_formatter.examples.each do |example|
    printf( "Example:  [%s]\n", example.metadata[:description] )
    printf( "Backtrace:\n %s\n", example.exception.backtrace.join("\n ") ) unless example.exception.nil?
end

Exception也会包含回溯

rescue Exception => e
  warn e.message
  e.backtrace
end

rescue Exception用作you will catch more than you want时要小心。