2017-11-20 5 views
1

私はWallabyを新しいPhoenixプロジェクトに取り込もうとしています。私は、readmeのセットアップ手順に従ってきましたが、私は基本的なテストを実行しようとすると、私はエクトレジストリのエラーを取得:Wallaby Ecto.Registry.lookupエラー

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

'features/home_page_test.exs:6'の文脈を私たちに教えてください。 – mudasobwa

+0

@mudasobwaが追加されました! – marcdel

答えて

0

はそれが私がWallabyTest.RepoWallabyTestWeb.Repoを置き換え、そして今のテストが満足しているFeatureCaseにおけるよう

私のレポは別のアプリであるコピー/ペースト問題でしたが判明します!

e:ヒントは、テストを実行するときにログにPostgresエラーが表示されていたということでした。mix ecto.resetを実行したときではありませんでした。

0

エリクシール1.5以上とフェニックス1.3を使用している場合、この問題はかなり頻繁にあるので、それは、確かにあなたのテストスイートの問題ではありません。 Propablyどこかに上記ログ内のあなたはこのようなものかもしれません:

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

TEST環境のすべてのマイグレーションを実行し、テストを再実行してみます。あなたは、1つのコマンドでそれを行うことができます。

MIX_ENV=test mix ecto.reset && mix test 

ecto.resetは、データベースを再作成、それを移行し、再び種を実行するための別名である、あなたのデータベースを(あなたのmix.exsファイルをチェック)、リセットされます。

+0

残念ながら、サイコロはありません。 'ERROR:データベース "cheese_log_test" はすでにexists' 'ステートメント:CREATE DATABASE "cheese_log_test" ENCODING 'を/ usr/localの/ var/resetingとテストを実行しているとき、私は以下を参照してください/ postgres.log'をログに 'UTF8'' – marcdel

+0

これが原因です。あなたのpsqlアカウントはこのデータベースを削除することはできません。おそらく他の権限も持っていないので、あなたのrepoテストはうまくいきません。エラーログでは、エクトがテストの失敗の理由であることは明らかです。 – PatNowak

関連する問題