在ExUnit中测试库

时间:2018-06-06 08:49:04

标签: testing elixir ecto

我正在测试此库的ExUnit中的查询(not the data returned from queries)。

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 :(得分:1)

一种可能性是使用Ecto.Adapters.SQL.to_sql/3检查生成的SQL:

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

答案 1 :(得分:0)

测试查询生成的最简单方法是创建您期望的查询&#34;手动&#34;在测试中。

一个这样的测试看起来像这样:

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结合起来。但它将确保您的测试不会因最小的版本更改而中断。只有一个主要的版本才能导致破坏测试,但是这样的版本也会导致应用程序崩溃,这反过来会使这一点变得无用。