如何查看 Ecto 测试期间执行的 SQL?

How can I see the SQL executed during an Ecto test?

当 运行 使用 mix test ... 进行 Ecto 测试时,未显示执行的 SQL。据我所知,它也没有记录到任何文件中。我怎样才能看到它? (我将 Ecto 用作 Phoenix 应用程序的一部分。)

Ecto 记录 SQL 级别 :debug 的查询。默认情况下,Logger级别设置为config/test.exs中的:warn,这将完全忽略:debug级别的日志。您可以将级别降低到 :debug 以查看 Ecto 执行的 SQL 查询。在 config/test.exs 中,更改:

config :logger, level: :warn

config :logger, level: :debug

然后 运行 mix test.

您还可以按照 :loggers 说明更改 Ecto 记录查询的级别 here

如果其他人 运行 遇到即使将记录器级别设置为 :debug 仍然看不到它们的问题,可能是您已将 ExUnit 配置为 capture_logs(可能传递给 start/1

您还可以通过在测试中放置以下行来仅为一个测试打开调试级别。这对于快速检查很有用。

test "..." do
  Logger.configure(level: :debug)
  #...
end