Posted at

Elixir: Faker を使って Ecto にテストデータを作成する

More than 3 years have passed since last update.


概要

Elixir の Faker を使って、データベースにテスト用のダミーデータを作成します。


Faker

Faker はダミーのデータを作成するツールです。

構造的には多言語構造をしていますが、現在はほとんど英語のダミーデータが生成されます(一部、ロシア語で生成できます)。

日本語に対応した同様なモジュールとしては KazuCocoa/elixir-gimei があります。

生成できるデータには 名前、住所、URL、e-mail アドレスなどがあります。詳細は、Hex doc を参照してください。


準備

データベースを使用する適当なプロジェクトを用意します。今回はこちらのサンプルコードを使います。

depsfaker を追加します。


mix.exs

  defp deps do

[ {:ecto, "~> 1.0"},
{:mariaex, ">= 0.0.0"},
{:faker, "~> 0.5", only: [:test, :dev]}
]
end

applicationapplications にも追加します。


mix.exs

  def application do

[applications: apps]
end

defp apps() do
apps = [:mariaex, :ecto, :logger]
if Mix.env in [:test, :dev] do
apps = apps ++ [:faker]
end

apps
end



ダミーデータの作成

適当な .exs ファイルにデータ作成のコードを書きます。

下記は RSS の Feed データのダミーデータ作成の例です。


priv/repo/make_fake.exs

SampleElixirEctoSelect.Repo.start_link

alias SampleElixirEctoSelect.RssFeed

Enum.map 0..99,
fn _ ->
params = %{
feed_url: Faker.Internet.url,
title: Faker.Commerce.product_name,
subtitle: Faker.Company.bs,
summary: Faker.Lorem.Shakespeare.romeo_and_juliet,
link: Faker.Internet.url,
author: Faker.Name.name,
image: Faker.Internet.image_url,
}

feed = %RssFeed{}
changeset = RssFeed.changeset(feed, params)

try do
SampleElixirEctoSelect.Repo.insert!(changeset)
rescue
# ignore error
_ -> {}
end
end


次の作成したスクリプトを実行します。

mix run priv/repo/make_fake.exs

完成後のコードはこちらです。


参考