gpt4 book ai didi

elixir - 如何测试多数据库 Elixir(Phoenix、Ecto)应用程序

转载 作者:行者123 更新时间:2023-12-02 02:15:36 28 4
gpt4 key购买 nike

运行访问多个数据库的测试的正确方法是什么?

我正在编写一个必须访问多个数据库的小型 API。

我定义了 2 个存储库,每个存储库都包装了不同的数据库:

# config/dev.exs, config/test.exs, ...
config :my_app, MyApp.DbStatusRepo,
adapter: Ecto.Adapters.Postgres,
....

config :my_app, MyApp.DbDefinitionRepo,
adapter: Ecto.Adapters.Postgres,
...

# lib/my_app/db_status_repo.ex
defmodule MyApp.DbStatusRepo do
use Ecto.Repo, otp_app: :my_app
end

# lib/my_app/db_definition_repo.ex
defmodule MyApp.DbDefinitionRepo do
use Ecto.Repo, otp_app: :my_app
end

这在运行服务器时有效,但我找不到一种方法来运行我的测试,而不需要默认的 MyApp.Repo

我更新(并添加)了两个存储库的别名。

我更改了对Repo的所有引用,但我很确定它在运行我的测试套件之前失败了。

运行混合测试会产生以下错误:

(Mix) 无法加载 SourcesApi.Repo,错误::nofile。请使用 -r 选项传递正确的存储库。

使用 -r 选项传递另一个存储库不会改变任何内容。同样的错误。

我的环境:

  • Elixir :1.1.1
  • Phoenix :1.0.3
  • Ecto:1.0.6

感谢您的帮助。

最佳答案

首先,您需要在 lib/my_app.ex 中启动存储库

# Start the Ecto repository
worker(MyApp.DbStatusRepo, []),
worker(MyApp.DbDefinitionRepo, []),

接下来,在 test/test_helper.exs 中准备存储库

Mix.Task.run "ecto.create", ["--quiet", "-r", "MyApp.DbDefinitionRepo"]
Mix.Task.run "ecto.migrate", ["--quiet", "-r", "MyApp.DbDefinitionRepo"]
Ecto.Adapters.SQL.begin_test_transaction(MyApp.DbDefinitionRepo)

关于elixir - 如何测试多数据库 Elixir(Phoenix、Ecto)应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33663960/

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