调试 rails 个测试

Debugging rails tests

测试一直是我避免的事情,直到我意识到通过编写良好的测试我可以避免进入控制台和 运行 一遍又一遍的一串命令。然而,我遇到的一个大问题是,当测试失败时,我看不到太多可用于调试的数据。例如,当我测试模型时,我需要查看模型属性,我需要控制它何时被构建、创建和保存,以及检测这些状态的方法。使用 rails 固定装置和普通测试,这很烦人。

如何使调试装置和 rails 测试更容易?有没有办法在测试失败时显示更多类似控制台的信息?我可以使用哪些测试工具来更轻松地进行调试?毕竟,调试测试本身是一种巨大的时间浪费,也是使用它们的最大障碍。

谢谢!

日志记录对调查和修复问题有很大帮助。不仅在测试中,而且在将其部署到生产环境中时也是如此。您可以记录模型的状态和其他有用的信息。还有标准 rails 日志 SQL 发送到数据库的日志,因此您可以轻松查看那里发生了什么。 SQL 日志记录在开发和测试中默认打开,看起来类似于:

[2015-09-24 23:19:36 ledger DEBUG]:   [1m[36m (0.2ms)[0m  [1mBEGIN[0m
[2015-09-24 23:19:36 ledger DEBUG]:   [1m[35mSQL (2.1ms)[0m  INSERT INTO "projections_tags" ("ledger_id", "tag_id", "name", "authorized_user_ids") VALUES (, , , ) RETURNING "id"  [["ledger_id", "ea9a68c5-c7c8-4964-b078-45bfc93d41ef"], ["tag_id", 9], ["name", "test"], ["authorized_user_ids", "{1}"]]
[2015-09-24 23:19:36 ledger DEBUG]:   [1m[36m (0.4ms)[0m  [1mCOMMIT[0m

我使用 log4r 作为日志库,因为它可以更好地控制日志输出。

我也不喜欢调试,但在某些情况下它确实有帮助。在这种情况下 byebug 是你的朋友。

和科西斯 rails consolerails dbconsole

调试测试与调试代码没有太大区别。

Rails 已经带有 byebug gem(如有必要,取消注释):

group :development, :test do
  gem 'byebug'
end

现在你可以投入了

debugger

在您的代码中的任意位置添加一行。

Byebug 支持许多附加功能,您可以在此处找到这些功能:https://github.com/deivid-rodriguez/byebug

同时检查 https://github.com/deivid-rodriguez/pry-byebug 项目,它提供了更好的调试体验。