У меня есть два приложения: пользователь и список воспроизведения.Пока приложения работают нормально, у меня возникают проблемы при настройке среды тестирования
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, но, похоже, не работает.Что мне не хватает?Любая помощь приветствуется.