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