Elixir
Faker
ecto

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

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

参考