postgresql 测试期间出现“无法查找Ecto repo”错误

6yoyoihd  于 2022-11-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(124)

当我尝试设置一个新的ecto repo时,我得到了下面的异常。目前只使用它进行测试(因为我只是设置它)。
** (RuntimeError) could not lookup Ecto repo Lipwig.AnnotatedUnit.Repo because it was not started or it does not exist
当我的测试使用Lipwig.AnnotatedUnit.DataCase时会发生这种情况,但是当我使用Lipwig.DataCase(它引用了Lipwig.Repo ')时,测试运行得很好。
我在项目中有以下设置。

defmodule Lipwig.Repo do
  use Ecto.Repo,
    otp_app: :lipwig,
    adapter: Ecto.Adapters.Postgres
end

defmodule Lipwig.AnnotatedUnit.Repo do
  use Ecto.Repo,
    otp_app: :lipwig,
    adapter: Ecto.Adapters.Postgres
end

这是我的测试装置

defmodule Lipwig.DataCase do
  use ExUnit.CaseTemplate

  using do
    quote do
      alias Lipwig.Repo

      import Ecto
      import Ecto.Changeset
      import Ecto.Query
      import Lipwig.DataCase
    end
  end

  setup tags do
    :ok = Ecto.Adapters.SQL.Sandbox.checkout(Lipwig.Repo)

    unless tags[:async] do
      Ecto.Adapters.SQL.Sandbox.mode(Lipwig.Repo, {:shared, self()})
    end

    :ok
  end

  def errors_on(changeset) do
    Ecto.Changeset.traverse_errors(changeset, fn {message, opts} ->
      Regex.replace(~r"%{(\w+)}", message, fn _, key ->
        opts |> Keyword.get(String.to_existing_atom(key), key) |> to_string()
      end)
    end)
  end
end

defmodule Lipwig.AnnotatedUnit.DataCase do
  use ExUnit.CaseTemplate

  using do
    quote do
      alias Lipwig.AnnotatedUnit.Repo

      import Ecto
      import Ecto.Changeset
      import Ecto.Query
      import Lipwig.AnnotatedUnit.DataCase
    end
  end

  setup tags do
    :ok = Ecto.Adapters.SQL.Sandbox.checkout(Lipwig.AnnotatedUnit.Repo)

    unless tags[:async] do
      Ecto.Adapters.SQL.Sandbox.mode(Lipwig.AnnotatedUnit.Repo, {:shared, self()})
    end

    :ok
  end

  def errors_on(changeset) do
    Ecto.Changeset.traverse_errors(changeset, fn {message, opts} ->
      Regex.replace(~r"%{(\w+)}", message, fn _, key ->
        opts |> Keyword.get(String.to_existing_atom(key), key) |> to_string()
      end)
    end)
  end
end

我的另一个Lipwig.Repo数据库几乎是相同的,只是引用了另一个repo。
我的config.exs配置定义了

config :lipwig,
  ecto_repos: [Lipwig.Repo, Lipwig.AnnotatedUnit.Repo]

我的test.exs配置是

config :lipwig, Lipwig.Repo,
  username: "postgres",
  password: "postgres",
  database: "lipwig_test",
  hostname: "localhost",
  pool: Ecto.Adapters.SQL.Sandbox

config :lipwig, Lipwig.AnnotatedUnit.Repo,
  username: "postgres",
  password: "postgres",
  database: "lipwig_test",
  hostname: "localhost",
  pool: Ecto.Adapters.SQL.Sandbox
pkln4tw6

pkln4tw61#

据我所知,配置似乎很好。正如错误所示,我认为问题可能是因为您没有在应用程序中启动Lipwig.AnnotatedUnit.Repo
/lib/lipwig_web文件夹中查找application.ex文件,并确保将Lipwig.AnnotatedUnit.Repo添加到子数组中。
希望这能解决🥂

相关问题