Packages
testcontainers
0.9.3
2.3.1
2.3.0
2.2.0
2.1.0
2.1.0-rc1
2.0.0
2.0.0-rc3
2.0.0-rc2
2.0.0-rc
1.14.1
1.14.0
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.12.0
1.11.8
1.11.7
1.11.6
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.4
1.8.3
1.8.2
1.8.1
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.2
1.4.1
1.4.0
1.3.1
1.3.0
1.2.11
1.2.10
1.2.9
1.2.8
1.2.7
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-beta.1
1.0.0-beta
0.9.3
0.9.2
0.9.1
0.9.0
Testcontainers is an Elixir library that supports ExUnit tests, providing lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container.
Current section
Files
Jump to
Current section
Files
lib/ex_unit.ex
# SPDX-License-Identifier: MIT
# Original by: Marco Dallagiacoma @ 2023 in https://github.com/dallagi/excontainers
# Modified by: Jarl André Hübenthal @ 2023
defmodule Testcontainers.ExUnit do
@moduledoc """
Convenient macros to run containers within ExUnit tests.
"""
import ExUnit.Callbacks
alias Testcontainers.Reaper
alias Testcontainers.Connection
alias Testcontainers.Container
@doc """
Sets a container to be created anew for each test in the module.
It also sets up the ExUnit callback to remove the container after the test has finished.
"""
defmacro container(name, config) do
quote do
require Logger
setup do
{:ok, _} = Connection.start_eager()
{:ok, _} = Reaper.start_eager()
{:ok, container} = run_container(unquote(config))
{:ok, %{unquote(name) => container}}
end
end
end
@doc """
Sets a container to be created at the beginning of the test module, and shared among all the tests.
It also sets up the ExUnit callback to remove the container after all the test in the module have finished.
"""
defmacro shared_container(name, config) do
quote do
require Logger
setup_all do
{:ok, _} = Connection.start_eager()
{:ok, _} = Reaper.start_eager()
{:ok, container} = run_container(unquote(config))
{:ok, %{unquote(name) => container}}
end
end
end
@doc """
Runs a container for a single ExUnit test.
It also sets up the ExUnit callback to remove the container after the test finishes.
"""
def run_container(config) do
Container.run(config, on_exit: &ExUnit.Callbacks.on_exit/1)
end
end