стирание datomic db для тестовой среды?

Я пытаюсь обрезать свою базу данных между тестами. Я вижу много вопросов в Google об удалении данных и о том, как удалить данные, но не о том, чтобы просто стереть базу данных.

Я делаю что-то из следующего, используя 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 и создавая заново, но устал от этого! Спасибо!


person jdkealy    schedule 26.01.2016    source источник
comment
Между тестами означает во время модульного тестирования?   -  person DanLebrero    schedule 26.01.2016


Ответы (2)


Существует delete-database fn. См. день datomic учебник для примера о том, как создать новую базу данных в памяти для каждого теста.

Кроме того, yeller содержит хороший пример использования функции datomic "что, если" для модульного тестирования.

person DanLebrero    schedule 26.01.2016

Я использовал (delete-database), как предлагает dAni, с фикстурой clojure.test:

(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, который мы определили через соответствие. Немного об уничтожении только базы данных datomic:mem связано с тем, что я параноик по поводу случайного удаления баз данных из производства.

Затем в тестовых функциях у нас есть:

(use-fixtures :each test-util/datomic-rollback-fixture)

(deftest my-test ...)

Кажется, пока у меня все работает нормально и достаточно быстро с базой данных памяти.

person Tim Gilbert    schedule 02.02.2016
comment
Такая паранойя может быть устранена, если ваши тесты будут только в пути к классам тестов, поэтому они никогда не попадут в банку, которую вы отправляете в производство. Leiningen может сделать это за вас. - person Hans Westerbeek; 06.01.2018
comment
Говоришь как человек, который недостаточно параноик. ;) - person Tim Gilbert; 07.01.2018