运行访问多个数据库的测试的正确方法是什么?
我正在编写一个必须访问多个数据库的小API。
我定义了2个Repos,每个Repos包装一个不同的数据库:
# 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选项传递另一个repo不会改变任何内容。同样的错误。
我的环境:
感谢您的帮助。
答案 0 :(得分:1)
首先,您需要在 id keyword count
0 0 a 10
1 0 b 9
2 0 c 9
3 1 a 1
4 1 b 10
5 1 c 10
6 2 a 9
7 2 b 0
8 2 c 5
9 3 a 6
10 3 b 0
11 3 c 8
12 4 a 0
13 4 b 3
14 4 c 8
<asp:TextBox ID="txtTsCs"
runat="server"
tabindex="7"
placeholder="Terms & Conditions"
TextMode="MultiLine"
Width="210px"
Height="254px">
</asp:TextBox>
接下来,在lib/my_app.ex
# Start the Ecto repository
worker(MyApp.DbStatusRepo, []),
worker(MyApp.DbDefinitionRepo, []),
答案 1 :(得分:0)
MyApp.Repo
中的test/support/conn_case.ex
有别名,这就是为什么你可以致电Repo.get(...)
:
using do
quote do
# Import conveniences for testing with connections
use Phoenix.ConnTest
alias MyApp.Repo
...
end
end
setup tags do
unless tags[:async] do
Ecto.Adapters.SQL.restart_test_transaction(MyApp.Repo, [])
end
:ok
end
您需要将该别名更新为您指定的其中一个存储库。但是,如果您有两个用于不同目的的存储库,那么当每个存储库都相关时,您应明确使用MyApp.DbStatusRepo.get(...)
和MyApp.DbDefinitionRepo.get(...)
。