如何通过编程获得rspec输出错误回溯

如何通过编程获得rspec输出错误回溯,rspec,rspec2,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::Formatte

我有一个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/核心”
需要'rspec/core/formatters/json_formatter'
需要“json”
def运行测试(测试位置)
config=RSpec.configuration
json_formatter=RSpec::Core::Formatters::JsonFormatter.new(config.output)
reporter=RSpec::Core::reporter.new(json_格式化程序)
config.instance_variable_set(:@reporter,reporter)
开始
::RSpec::Core::Runner.run([test_location,'--format',j']))
json_格式化程序。输出_散列
救援异常=>e
e、 信息
结束
结束
运行测试()
现在,当rspec测试失败时,我只能得到错误消息,但我想从失败的底层rspec测试中得到回溯。有没有办法做到这一点? 我已经尝试将参数传递给传递给RSpec::Core::Runner.run方法的数组:--backtrace或-b,但没有得到多少帮助


提前感谢任何引发异常的示例的回溯都可以在
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
一个实例也将包括一个回溯

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

使用
rescue Exception
as时要小心。

谢谢,但我认为这只有在某些规范测试失败并且我们需要回溯时才有效。另一方面,如果有人犯了语法错误,例如do follow:desscribe“test”do it“not work”do 1.eq(1)end-end-json_formatter_object包含:#另一方面,如果我们从cmd运行相同的规范文件,我们将为main:Object(NoMethodError)获得:/Users/bjusufbe/Desktop/rspec.rb:1:in
:undefined method
desscribe”。我需要的是处理这些情况,并检索发生此错误的代码行(与cmd行执行中的相同)
rspec
不会捕获该级别的异常,因此它会带着回溯退出。当捕获所有异常并返回异常消息时,异常发生时,
JsonFormatter
将保持其初始状态。您的另一个选择是不深入研究Rspec的内部。您可以通过
system
运行
rspec
。检查退出状态,并在rspec失败时从文件(
--format json--out rspec.json
)或
stderr
中提取结果。