Я использовал последние дни, чтобы копать глубже в clojure.spec в Clojure и ClojureScript.Сознательное сообщение об ошибке для Clojure.Spec проверки в: pre
До сих пор я нахожу его наиболее полезным, чтобы использовать спецификации в качестве охранников в :pre
и :post
в публичных функциях, которые полагаются на данные в определенном формате.
(defn person-name [person]
{:pre [(s/valid? ::person person)]
:post [(s/valid? string? %)]}
(str (::first-name person) " " (::last-name person)))
Проблема с этим подходом в том, что я получаю java.lang.AssertionError: Assert failed: (s/valid? ::person person)
без какой-либо информации о том, что именно не встретил спецификацию.
кто-нибудь идею , как получить лучшее сообщение об ошибке в :pre
или :post
охранников?
Я знаю о conform
и explain*
, но это не помогает в этих :pre
или :post
охранников.
Звучит разумно. Попробуй это. – DiegoFrings
Это не проверяет возвращаемые значения, поэтому инструмент заменяет только: pre. Идея заключается в том, что вы используете test.check, чтобы проверить правильность ввода данных в вашу функцию. Затем вы проводите тестирование и тестирование своих функций в процессе интеграции с помощью обычных тестов. Наконец, вы используете s/assert везде, где вы хотите, чтобы производственные охранники, например, упомянуты в ответе Алекса Миллера. –
: значения ret также могут быть использованы с использованием оркестра. https://github.com/jeaye/orchestra – xtreak