2017-11-20 4 views
1

Ich versuche Wallaby arbeiten an einem neuen Phoenix-Projekt. Ich habe die Installationsanweisungen in der Readme gefolgt, aber wenn ich versuche, einen grundlegenden Test laufen zu lassen ich einen Ecto Registry Fehler:Wallaby Ecto.Registry.lookup Fehler

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 

Hier ist der Fehler-Test:

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 

Hier ist das Feature Fall :

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 

Hier ist der gesamte PR mit meinen Setup-Änderungen: https://github.com/marcdel/wallaby_test/pull/1/files

Ich benutze 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) 
+0

Zeigen Sie uns den Kontext um 'features/home_page_test.exs: 6' bitte. – mudasobwa

+0

@mudasobwa hinzugefügt! – marcdel

Antwort

0

Stellt sich heraus, es ist ein copy/paste Problem war

Mein Repo in einer separaten App ist so in FeatureCase I WallabyTestWeb.Repo mit WallabyTest.Repo ersetzt, und jetzt sind die Tests glücklich!

e: Der Tipp war, dass ich nur Postgres-Fehler in den Protokollen beim Ausführen des Tests bekam, nicht bei mix ecto.reset.

0

Es ist sicherlich nicht das Problem mit dem Test-Suite, weil diese Frage recht häufig ist, wenn 1,3 Elixir 1.5 oder höher und Phoenix mit. Vermutlich irgendwo oben in Protokollen könnten Sie so etwas wie dieses finden:

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

Versuchen Sie, alle Migrationen für TEST-Umgebung ausgeführt werden und dann die Tests erneut ausführen. Sie können es mit einem Befehl tun:

MIX_ENV=test mix ecto.reset && mix test 

ecto.reset wird zurückgesetzt Ihre Datenbank (überprüfen Sie Ihre mix.exs-Datei), die für die Neuerstellung der Datenbank ein Alias ​​ist, ist es die Migration und Samen wieder zum Laufen.

+0

Kein Würfel, leider. In '/ usr/local/var/log/postgres.log' ich folgendes sehen, wenn Reseting und die Tests ausgeführt werden: ' ERROR: Datenbank "cheese_log_test" bereits exists' 'STATEMENT: CREATE DATABASE "cheese_log_test" encoding 'UTF8'' – marcdel

+0

Das ist dann die Ursache. Ihr psql-Konto kann diese Datenbank nicht löschen, hat wahrscheinlich auch keine anderen Berechtigungen, sodass Ihre Repo-Tests nicht funktionieren. Im Fehlerprotokoll ist klar, dass ecto der Grund für fehlgeschlagene Tests ist. – PatNowak