README.md

# Criterion

A library to write ExUnit tests BDD style

## Installation

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

```elixir
def deps do
  [
    {:criterion, "~> 0.1.0", only: [:test, :dev]}
  ]
end
```

## Usage

### Feature file

`test/features/Math.feature`

```feature
Feature: Math

	Scenario: Square
		Given a number greater than 1
		When the number is multiplied by it self
		Then the result is greater than the number
		And pi is a constant
```

### Shared steps

`test/support/shared_steps.ex`

```elixir
defmodule Criterion.SharedSteps do
  import Criterion

  defstep "Given a number", _context, args do
    min = args[:min] || 0
    %{number: min   Enum.random(0..100)}
  end
end
```

### Test

`test/criterion_test.exs`

```elixir
defmodule CriterionTest do
  use ExUnit.Case
  import Criterion
  alias Criterion.SharedSteps

  feature "Math" do
    setup do
      {:ok, pi: 3.14}
    end

    scenario "Square" do
      step("Given a number greater than 1",
        from: SharedSteps, # use only if the reusable step is in another module
        via: "Given a number" # use only if the reusable step has a different step name,
        where: [min: 2] # use only when you want to pass arguments to the reusable step,
      )

      step "When the number is multiplied by it self", %{number: number} do
        result = number * number
        %{result: result} # will be merged to the test context
      end

      step "Then the result is greater than the number", %{result: result, number: number} do
        assert result > number
      end

      # you can access data from the initial context of the test
      step "And pi is a constant", %{pi: pi} do
        assert pi == 3.14
      end
    end
  end
end
```

### Generating feature files

```
mix criterion.gen.features
```

#### Options

- `--dir` - specify the directory to read test files from. default is `test`
- `--file` - to generate feature files for a list of test files
- `--output` - specify the directory to generate feature files in. default is `test/features`

### Generating test files

```
mix criterion.gen.tests
```

#### Options

- `--dir` - specify the directory to read feature files from. default is `test/features`
- `--file` - to generate test for a list of files
- `--output` - specify the directory to generate the test files in. default is `test/features`