如何显示 RSpec 测试生成的 SQL 查询日志?
Posted
技术标签:
【中文标题】如何显示 RSpec 测试生成的 SQL 查询日志?【英文标题】:How to show SQL query log generated by a RSpec test? 【发布时间】:2011-10-16 14:21:29 【问题描述】:我正在为我的 rails 3 应用程序编写规范。我想测试数据库事务是否真的有效。能够在规范驱动的同时查看正在生成我的应用程序的 sql 查询将非常有帮助。
有没有办法像在 rails 控制台中一样查看查询?
我正在使用 Rails 3.0.9、RSpec 2.6 和 sqlite(稍后将迁移到 mysql)
【问题讨论】:
How do I turn on SQL debug logging for ActiveRecord in RSpec tests?的可能重复 【参考方案1】:把它放在你的规格中:
ActiveRecord::Base.logger = Logger.new(STDOUT) if defined?(ActiveRecord::Base)
您可以tail -f log/test.log
看看发生了什么。一个但不是两个。
为 Rails 5.2 编辑,添加这一行:
ActiveRecord::Base.verbose_query_logs = true
感谢Mike Monteiro 的更新!
【讨论】:
谢谢!我也发现这很有用。 benmabey.com/2008/07/04/… 在你的 test.rb 文件中你可能还需要设置config.log_level = :debug
在 Rails 5.2+ 中,您还可以添加 ActiveRecord::Base.verbose_query_logs = true
以查看触发每个查询的代码行【参考方案2】:
根据 Rails 5 文档 (Active Record Explain)。您现在可以使用说明方法。这只会记录您指定的查询,但如果您在测试前有大量 SQL 代码,您也不会感到不知所措。
ap Model.explain
【讨论】:
Model.explain
不记录查询——它执行数据库的 EXPLAIN 命令,该命令为您提供有关如何查询将运行的信息。诸如:它是否使用索引、查询需要检查多少行数据库等。以上是关于如何显示 RSpec 测试生成的 SQL 查询日志?的主要内容,如果未能解决你的问题,请参考以下文章