gpt4 book ai didi

ruby-on-rails-3 - 如何使用 rake 检测失败的单元测试

转载 作者:行者123 更新时间:2023-12-04 07:03:30 24 4
gpt4 key购买 nike

我正在使用 Ruby 1.9.3 和 Rails 3.2.8。这使用 rake 0.9.2.2。

我希望检测失败的单元测试,在 Rails 2.3 中,我们通过检查退出代码来做到这一点。这不再有效。

我尝试:

rake test:units TEST=test/unit/failing_test.rb RAILS_ENV=test && echo "OK"

failing_test.rb 包含一个断言为假的测试。我希望看到测试失败而不是看到“OK”,但相反,我看到了:

Started
F
===============================================================================
Failure: <false> is not true.
test: failing test case should fail. (FailingTest)
test/unit/failing_test.rb:6:in `block (2 levels) in <class:FailingTest>'
shoulda-context (1.0.0) lib/shoulda/context/context.rb:398:in `call'
shoulda-context (1.0.0) lib/shoulda/context/context.rb:398:in `block in create_test_from_should_hash'
activesupport (3.2.8) lib/active_support/testing/setup_and_teardown.rb:72:in `block in run'
activesupport (3.2.8) lib/active_support/callbacks.rb:425:in `_run__3774233495015181374__setup__985181848351195933__callbacks'
activesupport (3.2.8) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.8) lib/active_support/callbacks.rb:385:in `_run_setup_callbacks'
activesupport (3.2.8) lib/active_support/callbacks.rb:81:in `run_callbacks'
activesupport (3.2.8) lib/active_support/testing/setup_and_teardown.rb:70:in `run'
===============================================================================


Finished in 0.002753 seconds.

1 tests, 1 assertions, 1 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed

363.24 tests/s, 363.24 assertions/s
rake aborted!
Command failed with status (1): [/Users/chris/.rvm/rubies/ruby-1.9.3-p194/b...]

Tasks: TOP => test:units
(See full trace by running task with --trace)
OK

具体来说,我看到“命令失败,状态为 (1)”,但这似乎被 rake 吃掉了,因为我也看到了“OK”。请注意,如果我执行 echo $?,我会看到退出代码为 0(成功)。我试图让它在我们的持续集成和我们的发布脚本的上下文中工作,这两者都假设在发生错误的情况下退出代码将是非零的,就像 Rails 2.3 中发生的那样。

最佳答案

与您的不同,我使用相同的 rails/ruby/rake 进行的失败测试正在退出 1。也许您在代码库的某处调用了 at_exit { exit 0 }trap('EXIT') { exit 0 }。这将修改 rake 的退出代码。

如果您想要一种非 Ruby 方法来检测故障,您可以尝试使用 grep 读取测试输出。 grep 如果找到匹配则返回 0,否则返回 1。

正则表达式查找“0 次失败,0 次错误”,如果找到则返回0,否则返回1

rake test:units TEST=test/unit/failing_test.rb RAILS_ENV=test | \
tee >(xargs -0 echo {}) | \
grep '\([[:space:]]0[[:space:]]\)failures,\1errors' &&
echo OK

关于ruby-on-rails-3 - 如何使用 rake 检测失败的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12943284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com