如何测试未查询数据库

时间:2017-11-07 19:44:58

标签: elixir phoenix-framework ecto

在我的Phoenix应用程序中,我有一个函数可以从数据库中获取一些数据,然后将其缓存在Agent中。如何编写测试以确保仅在第一次请求值时才实际查询数据库?

2 个答案:

答案 0 :(得分:1)

我想说最简单的测试方法是:

  1. 调用代理并存储值
  2. 修改数据库上的值
  3. 再次致电代理并预期第一个值
  4. :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配置以使用此池。然后检查第一次打印时,第二次不打印。

这可能看起来像是一种矫枉过正,但从长远来看,这种做法会得到回报(我会说得更早而不是更晚。)