web-dev-qa-db-fra.com

affirmer la taille de la liste en élixir

Je voudrais affirmer la taille de la liste. Actuellement, je le fais comme suit:

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

Y a-t-il une meilleure façon de le faire?

32
almeynman

Kernel.length/1 retournera la taille d'une liste:

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

Vous pouvez le faire à partir d'une requête Ecto en utilisant:

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

Dans Ecto 2, vous pouvez utiliser Repo.aggregate/4

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