README.md

# ExUnitFixtures

A library for defining test fixtures for ExUnit tests. Inspired by py.test
fixtures.

#### What are Fixtures?

Fixtures in ExUnitFixtures are just functions that will be run before a test.
They can be used to setup the tests environment somehow, or provide the test
with some data that it requires.

ExUnit provides the `setup` and `setup_all` functions that can be used for
this.  These work well for simpler cases, but have a couple of drawbacks:

- The setup code will run for all tests, even if the test does not need it.
- Sharing setup code between modules requires extracting it out into a function.

ExUnitFixtures attempts to solve that. It provides a way to define a fixture,
which can be any bit of setup code that a test might require. Each of the tests
in a file can then list the fixtures they require and have them injected into
the tests context.

## Installation

  1. Add ex_unit_fixtures to your list of dependencies in `mix.exs`:

        def deps do
          [{:ex_unit_fixtures, "~> 0.2.0", only: [:test]}]
        end

## Documentation

The documentation can be found on hexdocs.pm:
http://hexdocs.pm/ex_unit_fixtures/ExUnitFixtures.html

## Example

For example, lets say some of your tests required a model named `my_model`, you
need to define the fixture using `deffixture` and then tag your test to say it
requires this fixture:

    defmodule MyTests do
      use ExUnitFixtures
      use ExUnit.Case

      deffixture my_model do
        # Create a model somehow...
        %{test: 1}
      end

      @tag fixtures: [:my_model]
      test "that we have some fixtures", context do
        assert context.my_model.test == 1
      end
    end

More details can be found in
[the documentation](http://hexdocs.pm/ex_unit_fixtures/ExUnitFixtures.html).