【问题标题】:How to clean test DB after **all** test complete?**所有**测试完成后如何清理测试数据库?
【发布时间】:2019-07-01 19:56:00
【问题描述】:

我有一个测试模块一个接一个地同步运行。
我想在 all 测试完成后清除测试对数据库所做的所有更改,即我希望数据在一个测试到另一个测试之间保留在数据库中。
我的应用正在使用 PostgreSQL 数据库 (MyRepo)。
当我在 setup_all 函数中使用 Ecto.Adapters.SQL.Sandbox.checkout(MyRepo) 时,数据库在每次测试后都会被清理。
这是我的condig/test.exs 文件:

config :my_repo, MyRepo,
       pool: Ecto.Adapters.SQL.Sandbox,
       database: "my-repo-test",
       username: "postgres",
       password: "postgres",
       hostname: "localhost",
       port:     "5432",
       pool_size: 1,
       max_overflow: 0,

正确的做法是什么?

【问题讨论】:

  • 在测试之间将数据存储在数据库中绝对是一个糟糕的主意。您有很多选项可以在 DB 中设置数据:设置、回调之前等。这就是单元测试应该完成的方式
  • 这与单元测试无关

标签: elixir integration-testing ex-unit


【解决方案1】:

你可以使用ExUnit.Callbacks.on_exit/2:

setup_all do
  on_exit fn -> Repo.cleanup() end
end

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多