Тестирование запросов в ExUnit для библиотеки - PullRequest
0 голосов
/ 06 июня 2018

Я тестирую запросы (not the data returned from queries) в ExUnit для этой библиотеки.

https://github.com/tanweerdev/fat_ecto

Вот мой код:

 test "returns the query where field like" do
   opts = %{
    "$where" => %{"first_name" => %{"$like" => "%Ham %"}}
   }

   assert build(QM.Test.Model, opts) ==
 end

Результатфункция, возвращаемая в консоли, выглядит следующим образом:

 left:  #Ecto.Query<from m in QM.Test.Model,
         where: like(m.first_name, ^"%Ham %")>

Основная цель здесь - проверить, правильно ли функция build создает запросы.

Я не тестирую ecto.Я тестирую функцию, которая строит запрос

Как мне вставить этот результат в правый to make the tests pass.

Любые предложения.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Наименее хрупким подходом к тестированию генерации запросов было бы создание запроса, который вы ожидаете «вручную» в тесте.

Один такой тест может выглядеть следующим образом:

expected_query = from m in QM.Test.Model, where: like(m.first_name, "%Ham %")
opts = %{
  "$where" => %{"first_name" => %{"$like" => "%Ham %"}}
}

assert build(QM.Test.Model, opts) == expected_query

Это, очевидно, все еще соединяет ваши тесты с Ecto.Но это гарантирует, что ваши тесты не сломаются при малейшем изменении версии.Только основной выпуск может привести к срыву тестов, но такой выпуск также приведет к сбою приложения, что, в свою очередь, лишает смысла.

0 голосов
/ 06 июня 2018

Одной из возможностей будет проверка результирующего SQL с использованием Ecto.Adapters.SQL.to_sql/3:

assert Ecto.Adapters.SQL.to_sql(
  :all, repo, build(QM.Test.Model, opts)
) == {"SELECT ... WHERE first_name LIKE '$1'", ["%Ham %"]}
...