博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elixir Ecto: 使用 ExMachina 批量生成测试数据
阅读量:6519 次
发布时间:2019-06-24

本文共 1977 字,大约阅读时间需要 6 分钟。

defmodule EctoTest.Factory do  use ExMachina.Ecto, repo: EctoTest.Repo  alias EctoTest.Model.User  alias EctoTest.Model.ChatGroup  alias EctoTest.Model.ChatGroupUser  @doc """  factory 是一个数据行的生成器, 生成一个Ecto结构, 这个结构随后可作为  create 函数的参数, 让 create 函数把这个结构插入到数据库  """  def factory(:users) do    %User{      # name: "Jane Smith",      name: sequence(:name, &"user#{&1}"),    }  end  def factory(:chat_groups) do    %ChatGroup{      name: sequence(:name, &"chat_group_#{&1}")    }  end  def factory(:chat_group_users) do    %ChatGroupUser{      user_id: :rand.uniform(100),      chat_group_id: :rand.uniform(100)    }  end  @doc """  向用户数据表调入数据  """  def load_users do    for _n <- 1..100 do      create :users    end  end  @doc """  导入组表  """  def load_chat_groups do    for _n <- 1..100 do      create :chat_groups    end  end  @doc """  导入用户组关系表  """  def load_chat_group_users do    for _n <- 1..200 do      create :chat_group_users    end  endend

如何使用

git clone https://github.com/developerworks/ecto_test.gitmix deps.getmix compileiex -S mix

测试

# 插入用户数据iex(40)> EctoTest.Factory.load_users # 插入聊天组数据iex(41)> EctoTest.Factory.load_chat_groups  # 插入用户-聊天组关系数据iex(42)> EctoTest.Factory.load_chat_group_user# 查询用户ID为1的用户, 并加载其所在的组列表iex(47)> user = EctoTest.Model.User |> EctoTest.Repo.get(1) |> EctoTest.Repo.preload(:chat_groups)# 访问用户所在的组iex(51)> user.chat_groups[%EctoTest.Model.ChatGroup{__meta__: #Ecto.Schema.Metadata<:loaded>, chat_group_users: #Ecto.Association.NotLoaded
, id: 85, inserted_at: #Ecto.DateTime<2016-04-29 14:19:50>, name: "chat_group_84", updated_at: #Ecto.DateTime<2016-04-29 14:19:50>, users: #Ecto.Association.NotLoaded
}, %EctoTest.Model.ChatGroup{__meta__: #Ecto.Schema.Metadata<:loaded>, chat_group_users: #Ecto.Association.NotLoaded
, id: 74, inserted_at: #Ecto.DateTime<2016-04-29 14:19:50>, name: "chat_group_73", updated_at: #Ecto.DateTime<2016-04-29 14:19:50>, users: #Ecto.Association.NotLoaded
}]

转载地址:http://aqrfo.baihongyu.com/

你可能感兴趣的文章