Clojure. «lein test» выполняет файл дважды - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь создать свои первые тесты на Clojure. Я написал этот файл . Когда я запускаю:

lein test

Я получил:

 ERROR in (update-question) (core.clj:32)
 Uncaught exception, not in assertion.
 expected: nil
   actual: 
              clojure.core/require        core.clj: 6007 (repeats 2 times)
            clojure.core/load-libs        core.clj: 5969
            clojure.core/load-libs        core.clj: 5985
            clojure.test/run-tests        test.clj:  768 (repeats 2 times)
                clojure.core/apply        core.clj:  667

  clojure.lang.ExceptionInfo: Parameter Mismatch: :id parameter data not found.
   java.lang.Exception: Exception in :get-one-question

FAIL in (create-answer) (tests_test.clj:63)
Create a new answer

expected: (not (nil? (:ordnen answer)))
 actual: (not (not true))

FAIL in (create-answer) (tests_test.clj:64)
  Create a new answer

expected: nil
  actual: "Some not so cool answer"

   diff: + "Some not so cool answer"
   2020-03-05 17:24:12,124 [main] INFO  zentaur.models.tests-test - >>> PA @first-user @first-user >>>>> {:email "grayson@me.com", :fname "Grayson", :lname "Barr", :active true, :id 72, :role_id 1, :uuid "efc8c516-04f1-4b22-a983-ed1e9c4f0da7"} 

 Ran 5 tests containing 7 assertions.
 **2 failures, 1 errors.**

Testing zentaur.models.tests-test
   2020-03-05 17:24:12,233 [main] INFO  zentaur.models.tests-test - >>> PARAM @first-question@first-question@first-question  >>>>> {:explanation "Explanation", :reviewed_fact false, :question "Some cool Question", :points 2, :hint "Some hint", :qtype 2, :updated_at #time/instant "2020-03-05T23:24:12Z", :reviewed_cr false, :active true, :id 71, :user_id 1, :origin 0, :fulfill nil, :created_at #time/instant "2020-03-05T23:24:12Z", :reviewed_lang false} 
  2020-03-05 17:24:12,849 [main] INFO  zentaur.models.tests-test - >>> PA @first-user @first-user >>>>> {:email "samantha@yahoo.com", :fname "Samantha", :lname "Good", :active true, :id 73, :role_id 1, :uuid "16d3eea4-3ed2-4636-a753-7fc0ec381e77"} 

Ran 5 tests containing 8 assertions.
0 failures, 0 errors.

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

            clojure.test/run-tests        test.clj:  768 (repeats 2 times)

, но я не знаю, почему файл вызывается дважды и почему в первый раз некоторые тесты «пропускаются». Если я удаляю строку:

  (run-tests)

из файла, выполняется только первое (и неправильное) время.

Ответы [ 2 ]

3 голосов
/ 06 марта 2020

Вам не нужно (run-tests) в файле. Команда lein test найдет все тесты, определенные с помощью deftest, и запустит их для вас.

Вот пример проекта , который можно клонировать и модифицировать (попробуйте сначала без изменений) чтобы увидеть пример того, как это должно выглядеть).


Возможно, ваш mount делает что-то странное. Мне лично не нравятся "тихие волхвы c", которые использует маунт. Кроме того, я удивлен, что это работает для zentaur.config, zentaur.handler и zentaur.db.core, когда они не являются частью выражения (:require ...).

0 голосов
/ 06 марта 2020

Как упомянул Алан, (run-tests) не требуется, эта опция обычно используется в сочетании с " with-test ".

Насколько я мог понять, прежде выполняя их, «lein test» собирает все «deftest» в векторе, который не отражает порядок в файле, поэтому последний «deftest» выполняется первым. Мое решение состояло в том, чтобы вложить три «(тестирующих») раздела, которые мне нужно выполнить последовательно, в «родительский» deftest .

...