【问题标题】:How To Unit Test MongoDB with Luminus?如何使用 Luminus 对 MongoDB 进行单元测试?
【发布时间】:2018-08-23 13:59:49
【问题描述】:

我可能遗漏了一些简单的东西,但我没有足够的 clojure 经验来理解我遇到的错误。

我有一个简单的 luminus clojure 应用程序设置和 Monger 库来处理我的 MongoDB 连接。我添加了一个简单的测试,它应该始终传递给我的测试文件。

(testing "create user"
    (let [result (db/create-user "test" "test" "test")]
    (is (true? true))))

但这不起作用,并引发以下错误

java.lang.ClassCastException: mount.core.DerefableState cannot be cast to com.mongodb.DB

我假设这与测试环境没有正确设置数据库内容并在那里失败有关。我进行了一些搜索,但没有找到任何有用的信息,而且 Monger Docs 中似乎没有任何测试帮助。我确信上面的create-user 调用在实际环境中运行时确实有效。

【问题讨论】:

  • 查看异常,可能在您的测试运行之前未启动挂载?看起来它正在传递一个“未启动”的组件,预计会有一个实时连接。

标签: mongodb clojure luminus monger


【解决方案1】:

您似乎没有在测试运行之前绑定数据库:

https://github.com/yogthos/clojure-error-message-catalog/blob/master/lib/mount/derefablestate-cannot-be-cast-to-ifn.md

我没有使用 Luminus,但我确实对数据库相关代码进行了一些集成测试,在这些测试中我提前初始化了我的 monger 数据库连接:

(ns ^:integration mango.db-test
(:require [clojure.test :refer :all]
        [monger.db :as mdb]
        [mango.db :as db]
        [mango.config :as config]))

(defn db-fixture [f]
  (println "Testing DB on " config/db-name)
  (db/init)
  (f)
  (mdb/drop-db @db/DB)
  (db/terminate)
)

(use-fixtures :once db-fixture)

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 2012-01-08
    • 2016-05-30
    • 2015-03-23
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多