Как провести модульное тестирование MongoDB с помощью Luminus?

Я, вероятно, упускаю что-то простое, но я не достаточно опытен с 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, похоже, нет никакой помощи в тестировании. Я точно знаю, что выше create-user вызов работает, когда работает в реальной среде.

1 ответ

Похоже, что вы не связываете свою базу данных до запуска тестов:

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

Я не использовал Luminus, но у меня есть некоторые интеграционные тесты для кода, связанного с базой данных, в которых я заранее инициализирую свое соединение с базой данных:

(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)
Другие вопросы по тегам