ruby-on-rails - Rspec 将 sql 记录到控制台以过滤/标记规范

标签 ruby-on-rails ruby postgresql rspec filtering

如果我专门标记一个规范,或者至少只针对重点示例,我希望能够在我的控制台中看到 SQL 输出。我总是可以通过添加来显示它:

ActiveRecord::Base.logger = Logger.new(STDOUT)

但是太冗长了。我试图使用这样的环绕条件但没有成功:

# log SQL to console for tests tagged with :db
config.around do |example|
  if example.metadata[:db]
    ActiveRecord::Base.logger = Logger.new(STDOUT)
  end
end

如何实现?

最佳答案

我必须在我的 spec_helper.rb 中使用 beforeafter

# log SQL to console for tests tagged with :db
config.before(:each, db: true) do
  @default_logger = ActiveRecord::Base.logger
  ActiveRecord::Base.logger = Logger.new(STDOUT)
end

# log SQL to console for tests tagged with :db
config.after(:each, db: true) do
  ActiveRecord::Base.logger = @default_logger
end

我喜欢 Paul N. 提出的“确保”可能性并摆脱实例变量的想法。 Paul N. 的方法会引发语法错误,因为 ensure 子句只能在方法内部运行。

def with_std_out_logger
  default_logger = ActiveRecord::Base.logger
  ActiveRecord::Base.logger = Logger.new(STDOUT)
  yield
ensure
  ActiveRecord::Base.logger = default_logger
end

config.around(:each, db: true) do |example|
  with_std_out_logger { example.run }
end

关于ruby-on-rails - Rspec 将 sql 记录到控制台以过滤/标记规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526714/

相关文章:

ruby-on-rails - Rails 'link_to' 立即下载图像而不是在浏览器中打开它

ruby-on-rails - Rails 迁移 : add_reference to Table but Different Column Name For Foreign Key Than Rails Convention

ruby - 在 Ruby 中,如何将 ë,à,é,ä 等特殊字符全部转换为 e,a,e,a?

sql - 为什么我不能在 postgres 反斜杠命令 (\COPY) 中使用变量

python - MVC 框架从一种语言到另一种语言(例如 ASP.NET、Python、RoR 等)差异很大吗?

ruby-on-rails - JSON 参数在请求哈希中不可用(Rails、omniauth-google-oauth2 gem)

ruby - 如何在 Rails 中创建动态命名方法?

ruby-on-rails - Rails 缺少帮助程序文件 application_helper.rb_helper.rb

java - Hibernate - 查询为实体中的所有字段返回空值,而同一查询从数据库中完美返回

java - 听/通知 pgconnection 关闭 java?