在我的Phoenix应用程序中,我有一个函数可以从数据库中获取一些数据,然后将其缓存在Agent
中。如何编写测试以确保仅在第一次请求值时才实际查询数据库?
答案 0 :(得分:1)
我想说最简单的测试方法是:
:ok = DB.insert("old_value")
assert {:ok, "old_value"} = YourCache.get_value()
:ok = DB.insert("new_value")
assert {:ok, "old_value"} = YourCache.get_value()
答案 1 :(得分:1)
这样做的正确方法是用例如模拟数据库实例。 Mox
使用explicit contact进行数据库查询。
如果您使用Ecto
,它会自行完成;检查config/test.exs
文件以查看它在测试中使用Ecto.Adapters.SQL.Sandbox
。将整个sandbox.ex
文件复制到您的测试套件,修改Connection.handle_execute/4
以执行IO.puts
之类的操作,如控制台等。更改您的test.exs
配置以使用此池。然后检查第一次打印时,第二次不打印。
这可能看起来像是一种矫枉过正,但从长远来看,这种做法会得到回报(我会说得更早而不是更晚。)