Help us understand the problem. What is going on with this article?

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

More than 5 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

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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away