ruby测试 - 错误消息不包括行号或文件名

时间:2010-12-23 17:52:07

标签: ruby-on-rails ruby

如何在测试时使用我的错误报告行号。以下是我得到的典型错误:

josh@josh-laptop:~/d/test$ ruby unit/line_test.rb -n test_update
Loaded suite unit/line_test
Started
E
Finished in 0.066663 seconds.

  1) Error:
test_update(LineTest):
NameError: undefined local variable or method `sdf' for
#<LineTest:0xb6e61304>


1 tests, 0 assertions, 0 failures, 1 errors

没有行号和文件名很难调试。从代码 我见过的样本,人们通常会得到更详细的错误 报告。我该如何启用它?

谢谢!

[编辑]从Rails指南

$ ruby unit/post_test.rb -n test_should_report_error
Loaded suite -e
Started
E
Finished in 0.082603 seconds.

  1) Error:
test_should_report_error(PostTest):
NameError: undefined local variable or method `some_undefined_variable' for #<PostTest:0x249d354>
    /test/unit/post_test.rb:6:in `test_should_report_error'

1 tests, 0 assertions, 0 failures, 1 errors

3 个答案:

答案 0 :(得分:0)

您的单位测试多长时间?通常,测试用例应该只有几行代码。如果没有,请考虑将其拆分。这应该真的缩小范围,特别是对于未定义的变量或方法。在任何情况下,如果你安装ruby-debug,你可以逐步完成测试用例,看看问题究竟在哪里。

答案 1 :(得分:0)

我找到了一个我不喜欢但能完成工作的答案。我以为我会发布它以防万一其他人找不到更好的解决方案

ruby -d unit/line_test.rb -n test_update

-d将$ DEBUG设置为true,并提供包含错误,警告,异常详细信息的转储

答案 2 :(得分:0)

如果这是一个Rails应用程序?然后很可能Rails' backtrace cleaner正在阻碍。很可能是因为您的目录以“单元”开头,而不像Rails假设的那样“测试”。我遇到了类似的问题(我正在开发的插件在Rails目录之外,所以整个回溯都被过滤了。)

查看default silencer并添加一个过滤器,使其通过此消音器(过滤器在消音器之前运行)或者只需用remove_silencers!删除消音器。 Rails提供a file in the initializers directory来执行此操作,但默认情况下该行已注释掉。