gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:02:08 24 4
gpt4 key购买 nike

如果我专门标记一个规范,或者至少只针对重点示例,我希望能够在我的控制台中看到 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/

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