Elixir Phoenix 프로젝트에서 Ecto 2.0과 MySQL을 함께 사용하고 있습니다. Ecto2.0에 따르면 documentation에 따르면 MySQL은 동시 테스트을 지원하지 않으므로 ExUnit.Case, async: true
대신에 을 사용해야 테스트가 동시에 실행되지 않습니다.Ecto 2.0 + MySQL : 테스트에서 조명 설비
필자의 테스트에서 필자는 데이터베이스에 모델을 삽입하고 테스트가 완료되면 픽스처로 삽입 된 모델은 여전히 데이터베이스에 남아 있습니다 (테스트 된 코드로 삽입 된 모델 자체는 정리됩니다). Fixture에 의해 삽입 된 모델을 제거하고 싶습니다. 내가 할 경우 내가 할 경우,
** (exit) exited in: GenServer.call(#PID<0.277.0>, {:checkout, #Reference<0.0.1.1885>, true, 15000}, 5000)
** (EXIT) shutdown: "owner #PID<0.276.0> exited with: shutdown"
stacktrace:
(db_connection) lib/db_connection/ownership/proxy.ex:32: DBConnection.Ownership.Proxy.checkout/2
을 :
ExUnit.Case
setup do
on_exit fn ->
Repo.delete_all(ModelA)
Repo.delete_all(ModelB)
end
end
내가 얻을 :
내가 할 경우
ExUnit.Case, async: true
setup do
on_exit fn ->
Repo.delete_all(ModelA)
Repo.delete_all(ModelB)
end
end
는 작동 및 고정 데이터에 청소됩니다 데이터 베이스. 그러나 모든 테스트를 실행할 때 ExUnit.Case, async: true
을 지정하면 MySQl에서 동시에 테스트가 실행되기 때문에 문제가 발생합니다.
어디에서 조명기를 삽입하고 있습니까? – Dogbert
조명기는 테스트/지원 모듈에 정의되어 있으며 테스트 데이터베이스에 삽입됩니다. 검사는 삽입 된 조명기를 사용하고 작업하지만 자동으로 청소되지는 않습니다. – David