web-dev-qa-db-ja.com

elixirでリストのサイズをアサートします

リストのサイズをアサートしたいと思います。現在、私は次のようにしています:

assert devices = Repo.all from d in device, where d.uuid == ^attrs.uuid
assert devices.first == devices.last

それを行うより良い方法はありますか?

32
almeynman

Kernel.length/1 はリストのサイズを返します:

length([1,2,3]) #3

これは、次を使用してEctoクエリから実行できます。

query = from d in Device, where: d.uuid == ^uuid, select: fragment("count(?)", d.id)
assert  Repo.all(query)== 3

Ecto 2では、 Repo.aggregate/4 を使用できます

query = from d in Device, where: d.uuid == ^uuid)
assert Repo.aggregate(query, :count, :id) == 3
47
Gazler