README.md

# AssertEventually
[![CircleCI](https://circleci.com/gh/rslota/ex_assert_eventually.svg?style=svg)](https://circleci.com/gh/rslota/ex_assert_eventually)

Very simple test helper for Elixir's ExUnit framework that allows to use standard ExUnit assertions along with expressions that may
fail several times until they **eventually** succeed.

## Documentation

Documentation can be found on [https://hexdocs.pm/ex_assert_eventually](https://hexdocs.pm/assert_eventually).

## Installation

The package can be installed by adding `assert_eventually` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:assert_eventually, "~> 1.0.0", only: :test}
  ]
end
```

AssertEventually is usually added only to the :test environment since it's used in tests. To also import AssertEventually's formatter configuration, add the :dev environment as well as :test for `assert_eventually` and add :assert_eventually to your .formatter.exs:
```elixir
[
  import_deps: [:assert_eventually]
]
```

## Just tell me how to use it already...


Here you go (just replace `ComplexSystem` with something of yours):

```elixir
defmodule MyApp.SomeTest do
  use ExUnit.Case, async: true

  # Fail after 50ms of retrying with 5ms time between attempts
  use AssertEventually, timeout: 50, interval: 5

  test "get meaningful value by using normal assert" do
    {:ok, server_pid} = start_supervised(ComplexSystem)

    eventually assert {:ok, value} = ComplexSystem.get_value(server_pid)
    assert value == 42
  end

  test "get meaningful value by using assert_in_delta" do
    {:ok, server_pid} = start_supervised(ComplexSystem)

    eventually assert_in_delta 42, elem(ComplexSystem.get_value(server_pid), 1), 0
  end
end
```

For more details please consult the [documentation](https://hexdocs.pm/assert_eventually).