Skip to content
Easy way to cook your structs for tests 🍪
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
lib
test
.gitignore
README.md
mix.exs

README.md

ExFabricators

This small library is fully inspired by Fabrication gem for Rails and has the same goals: single point to generate structs and structs trees for tests.

This library gives you a some small DSL for defining fabricators.

It is a dirty implementation which has a many restrictions but is good enough for starting.

Installation

You can install this package from Hex:

  def deps do
    [{:ex_fabricators, "~> 0.1.0"}]
  end

Or you can install it from github:

  def deps do
    [{:ex_fabricators, github: "alterego-labs/ex_fabricators"}]
  end

Usage

For first you must to define your fabricators. By default the folder for fabricators is test/fabricators so just add under this folder files with content like the following:

use ExFabricators.Builder

fabricator :team, YourApp.Structs.Team

Save code above into test/fabricators/team_fabricator.exs file. Always name files by <context>_fabricator.exs pattern because this package expects it.

The next step is to load fabricators. For this add the next line into test_helper.exs:

ExFabricators.take_all!(Path.join(File.cwd!, "test/fabricators"))

Then in tests or in setup callbacks you can run fabricators like this:

  Fabricators.build(:team)

As a result you give initialized YourApp.Structs.Team struct with default properties.

If you try to build undefined fabricator RuntimeError will be thrown.

The last parameter of the fabricator/3 macro is an anonymous function that must return a Map. So, for example, if your Team struct has id property and you want to set it while building do it like the following:

  fabricator :team, YourApp.Structs.Team, fn -> %{id: 2} end

The you can provide some dependencies for the building structs:

  fabricator :event, YourApp.Structs.Event, fn -> %{home_team: Fabricators.build(:team)} end
You can’t perform that action at this time.