2

我可能遗漏了一些简单的东西,但是我对 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调用在实际环境中运行时确实有效。

4

1 回答 1

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)
于 2018-08-23T05:59:49.333 回答