11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

概要

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

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

参考

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?