擦除测试环境的数据库数据库?

时间:2016-01-26 01:36:16

标签: clojure datomic

我试图在测试之间截断我的数据库数据库。我在谷歌上看到很多关于切除和如何删除数据的问题,但没有关于只是擦干数据库的问题。

我正在使用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并重新创建来消除数据库,但厌倦了这样做!谢谢!

2 个答案:

答案 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 ...)

到目前为止似乎对我来说工作正常,而且内存数据库足够快。