Ecto.ConstraintError при тестировании приложения Umbrella - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть два приложения: пользователь и список воспроизведения.Пока приложения работают нормально, у меня возникают проблемы при настройке среды тестирования

setup do
    :ok = Ecto.Adapters.SQL.Sandbox.checkout(Playlists.Repo)
    Ecto.Adapters.SQL.Sandbox.checkout(Accounts.Repo)
    Ecto.Adapters.SQL.Sandbox.mode(Playlists.Repo, {:shared, self()})
    Ecto.Adapters.SQL.Sandbox.mode(Accounts.Repo, {:shared, self()})         
    :ok
end

test "create a playlist" do
  { _, user1 } = Users.register("user1", "user1@email.com", "user1pw")
  { _, playlist1 } = Playlists.create_playlist("title", "user1")

  assert playlist1 == Playlists.get_playlist!(1)
end

Я сталкиваюсь с этой ошибкой

  1) test Playlist create a playlist (PlaylistsTest)
 test/playlists_test.exs:14
 ** (Ecto.ConstraintError) constraint error when attempting to insert struct:

     * playlists_user_id_fkey (foreign_key_constraint)

 If you would like to stop this constraint violation from raising an
 exception and instead add it as an error to your changeset, please
 call `foreign_key_constraint/3` on your changeset with the constraint
 `:name` as an option.

 The changeset has not defined any constraint.

 code: { _, playlist1 } = Playlists.api_create_playlist("title", "icon", false, "user1")
 stacktrace:
   (ecto) lib/ecto/repo/schema.ex:647: anonymous fn/4 in Ecto.Repo.Schema.constraints_to_errors/3
   (elixir) lib/enum.ex:1314: Enum."-map/2-lists^map/1-0-"/2
   (ecto) lib/ecto/repo/schema.ex:632: Ecto.Repo.Schema.constraints_to_errors/3
   (ecto) lib/ecto/repo/schema.ex:238: anonymous fn/15 in Ecto.Repo.Schema.do_insert/3
   (ecto) lib/ecto/repo/schema.ex:875: anonymous fn/3 in Ecto.Repo.Schema.wrap_in_transaction/6
   (ecto_sql) lib/ecto/adapters/sql.ex:782: anonymous fn/3 in Ecto.Adapters.SQL.checkout_or_transaction/4
   (db_connection) lib/db_connection.ex:1341: DBConnection.run_transaction/4
   test/playlists_test.exs:16: (test)

Я проверил создаваемый user1, поэтому проблема должна быть всоздание списка воспроизведения, и из сообщения об ошибке конкретно об уникальных ограничениях.В def change() моих Repo.Migrations у меня есть

create table(:playlists) do
  add :title, :string
  add :user_id, references(:users, null: false)

  timestamps()
end

create unique_index(:playlists, [:title, :user_id])
create unique_index(:playlists_users, [:playlist_id, :user_id])

. Я запутался в нескольких конфигурациях Ecto Sandbox, но, похоже, не работает.Что мне не хватает?Любая помощь приветствуется.

...