Ich habe die letzten Tage verwendet, um tiefer in clojure.spec in Clojure und ClojureScript zu graben.Bedeutungsvolle Fehlermeldung für Clojure.Spec Validierung in: vor
Bis jetzt finde ich es am nützlichsten, Spezifikationen in :pre
und :post
in öffentlichen Funktionen, die auf Daten in einem bestimmten Format beruhen, als Wächter zu verwenden.
(defn person-name [person]
{:pre [(s/valid? ::person person)]
:post [(s/valid? string? %)]}
(str (::first-name person) " " (::last-name person)))
Das Problem mit diesem Ansatz ist, dass ich ein java.lang.AssertionError: Assert failed: (s/valid? ::person person)
ohne Informationen über bekommen, was genau die Spezifikation nicht erfüllt hat.
Hat jemand eine Idee wie eine bessere Fehlermeldung erhalten in :pre
oder :post
Wachen?
Ich weiß über conform
und explain*
, aber das hilft nicht in diesen :pre
oder :post
Wachen.
Klingt vernünftig. Werde das versuchen. – DiegoFrings
Dies wird jedoch keine Rückgabewerte überprüfen, daher ersetzt das Instrument nur: pre. Die Idee ist, dass Sie test.check verwenden, um zu testen, ob Ihre Funktionen die Eingabe korrekt ausgeben. Dann instrumentieren Sie und testen Sie Ihre Funktionen in der Integration durch normale Tests. Schließlich verwenden Sie s/assert wo immer Sie wollen, Produktionswächter, wie in Alex Miller's Antwort erwähnt. –
: ret-Werte können auch mit Orchester instrumentiert werden. https://github.com/jeaye/orchestra – xtreak