我有一个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方法的数组但是没有得到很多帮助
提前致谢
答案 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时要小心。