我试图在测试之间截断我的数据库数据库。我在谷歌上看到很多关于切除和如何删除数据的问题,但没有关于只是擦干数据库的问题。
我正在使用core.test执行以下操作:
(with-redefs [db/uri "datomic:free://localhost:4334/test_om_asyn101_next"
db/conn (d/connect db/uri)]
(run-tests 'rtest.core-test))
我一直在通过更改URI并重新创建来消除数据库,但厌倦了这样做!谢谢!
答案 0 :(得分:2)
有一个delete-database fn。有关如何为每个测试创建新的内存数据库的示例,请参阅day of datomic教程。
此外,yeller提供了一个很好的示例,说明如何使用datomic's "what if"功能进行单元测试。
答案 1 :(得分:2)
我一直在使用(delete-database)
作为dAni建议,使用clojure.test fixture:
(ns test-util)
(defn datomic-rollback-fixture [test-fn]
;; setup
(run-migrations)
;; run the tests
(test-fn)
;; clean up
(let [datomic-uri (get-in config/config [:datomic :uri])]
(when (string/starts-with? datomic-uri "datomic:mem:")
(d/delete-database datomic-uri))))
(run-migrations)
函数从EDN文件加载我们的模式定义,我们通过conformity定义了该文件。关于只破坏datomic:mem
数据库的一点是因为我很擅长将数据库从生产中删除。
然后在测试功能中,我们得到了:
(use-fixtures :each test-util/datomic-rollback-fixture)
(deftest my-test ...)
到目前为止似乎对我来说工作正常,而且内存数据库足够快。