factori is a library to generate fake data for your tests based on your database schema.
Instead of having to implement a Faker mapper for each data structure in your application, factori
enables you to just bootstrap a factory module based on a PostgreSQL database.
Classic ex_machina
factory module in every project:
defmodule Factory do
use ExMachina.Ecto, repo: MyApp.Repo
def user_factory do
%MyApp.User{
first_name: Faker.first_name(),
admin: Enum.random([true, false])
}
end
end
# Then use it in your test cases:
Factory.insert(:user)
Couple of things that factori
tries to fix:
- No more forgetting to add a Faker generator for a new field added
- Automatic association handling based on foreign key
- Random data based on database built-in constraint (column size, nullability)
- No more “magic” API that calls the right function based on the suffix
_factory
- Easily add “named” variant of data (example: insert an admin user)
The result is pretty simple for the user:
defmodule MyAppTest.Factory do
use Factori, repo: MyApp.Repo, mappings: [Factori.Mapping.Faker]
end
user = MyAppTest.Factory.insert("users")
user.first_name # => "Lorem"
user.last_name # => "Ipsum"
Go check the docs to see all the possibilities with named variants, structs, overrides, mapping, transform, etc This is an early release, I’m open to comments and API changes