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