给出以下测试:
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语句中被调用了?
答案 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.