在minitest中显示完整的堆栈轨道

时间:2014-08-08 14:47:52

标签: ruby minitest

给出以下测试:

require 'minitest/spec'
require 'minitest/autorun'

describe 'stuff' do
  def foo
    assert false
  end

  it "should show stack trace" do
    foo
  end
end

我收到第6行声明失败的错误,是否可以显示完整的堆栈跟踪,所以我知道它在it语句中被调用了?

4 个答案:

答案 0 :(得分:1)

使用默认的Minitest,只有在引发异常时才会获得(缩写)堆栈跟踪。如果您希望能够轻松自定义输出,请尝试使用Minitest::Reporters gem。还包括显示故障的部分堆栈跟踪。

答案 1 :(得分:0)

最小的失败消息应该显示哪个测试失败 - 在引发异常的情况下,堆栈跟踪将是有用的。

所以,如果我添加另一个调用foo方法的测试,那么我也会看到测试失败,并且同一行。

describe 'stuff' do
  def foo
    assert false
  end

  it "should show stack trace" do
    foo
  end

  it "will not show stack trace" do
    foo
  end
end

然后我明白了;

Finished in 0.001372s, 1457.7259 runs/s, 1457.7259 assertions/s.

  1) Failure:
stuff#test_0001_should show stack trace [t.rb:6]:
Failed assertion, no message given.


  2) Failure:
stuff#test_0002_will not show stack trace [t.rb:6]:
Failed assertion, no message given.

您通常会在测试中使用自定义方法来验证常用功能;

it 'works like a Widget' do
  widget = WidgetMaker.do_something
  verify_widget widget
end

private

def verify_widget(widget)
  assert_ # etc ...
end

答案 2 :(得分:0)

正如@Rafael在评论中提到的那样,如今有-b标志。

抬起头,这是一个最小的选择,而不是一个危险的选择,所以顺序是:

rails test -b #...

答案 3 :(得分:0)

似乎 -b 不再是 rake test 的有效选项。我正在运行 minitest (5.13.0)

改用-t

rake test -h
...
-t, --trace=[OUT]   Turn on invoke/execute tracing, enable full backtrace. OUT can be stderr (default) or stdout.