Wallaby Ecto.Registry.lookup ошибка

Я пытаюсь заставить Уоллаби работать над новым проектом Феникса. Я следовал инструкциям по установке в файле readme, но когда я пытаюсь запустить базовый тест, я получаю ошибку реестра Ecto:

1) test home page has welcome message (WallabyTestWeb.HomePageTest)
     test/wallaby_test_web/features/home_page_test.exs:6
     ** (ArgumentError) argument error
     stacktrace:
       (stdlib) :ets.lookup_element(Ecto.Registry, nil, 3)
       (ecto) lib/ecto/registry.ex:18: Ecto.Registry.lookup/1
       (ecto) lib/ecto/adapters/sql/sandbox.ex:529: Ecto.Adapters.SQL.Sandbox.proxy_pool/1
       (ecto) lib/ecto/adapters/sql/sandbox.ex:469: Ecto.Adapters.SQL.Sandbox.checkout/2
       (wallaby_test) test/support/feature_case.ex:18: WallabyTestWeb.FeatureCase.__ex_unit_setup_0/1
       (wallaby_test) test/support/feature_case.ex:1: WallabyTestWeb.FeatureCase.__ex_unit__/2
       test/wallaby_test_web/features/home_page_test.exs:1: WallabyTestWeb.HomePageTest.__ex_unit__/2

Вот провальный тест:

defmodule WallabyTestWeb.HomePageTest do
  use WallabyTestWeb.FeatureCase, async: true

  import Wallaby.Query

  test "home page has welcome message", %{session: session} do
    require IEx
    IEx.pry()

    session
    |> visit("/")
    |> assert_has(css("h2", text: "Welcome to Phoenix!"))
  end
end

Вот особый случай:

defmodule WallabyTestWeb.FeatureCase do
  use ExUnit.CaseTemplate

  using do
    quote do
      use Wallaby.DSL

      alias WallabyTestWeb.Repo
      import Ecto
      import Ecto.Changeset
      import Ecto.Query

      import WallabyTestWeb.Router.Helpers
    end
  end

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

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

    metadata = Phoenix.Ecto.SQL.Sandbox.metadata_for(WallabyTestWeb.Repo, self())
    {:ok, session} = Wallaby.start_session(metadata: metadata)
    {:ok, session: session}
  end
end

Вот весь PR с моими изменениями настройки: https://github.com/marcdel/wallaby_test/pull/1/files

Я использую Elixir 1.6, PhantomJs 2.1.1.

$ elixir --version
Erlang/OTP 20 [erts-9.1.4] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.6.0-dev (882c2bd) (compiled with OTP 20)

$ brew info phantomjs
phantomjs: stable 2.1.1 (bottled)

2 ответа

Решение

Оказывается, это была проблема копирования / вставки

Мой репозиторий находится в отдельном приложении, поэтому в FeatureCase я заменил WallabyTestWeb.Repo с WallabyTest.Repoи теперь испытания счастливы!

e: подсказка была в том, что я получал только ошибки Postgres в логах при выполнении теста, а не при выполнении mix ecto.reset,

Это, конечно, не проблема с вашим набором тестов, потому что эта проблема довольно часто встречается при использовании Elixir 1.5 или выше и Phoenix 1.3. Вероятно, где-то выше в журналах вы можете найти что-то вроде этого:

** (DBConnection.OwnershipError) cannot find ownership process for 
#PID....

Попробуйте запустить все миграции для TEST окружающей среды, а затем повторно запустите тесты. Вы можете сделать это с помощью одной команды:

MIX_ENV=test mix ecto.reset && mix test

ecto.reset сбросит вашу базу данных (проверьте mix.exs file), который является псевдонимом для воссоздания вашей базы данных, ее миграции и повторного запуска seed.

Другие вопросы по тегам