2017-09-09 4 views
1
(s/def ::users (s/coll-of ::user :distinct true)) 

Die Spezifikation oben zu überprüfen, muss jeden Benutzer Karte verschieden sein aber wie kann ich es gebe für verschiedene :user/idsWie verschiedene ID in spec/coll-of

Die Sammlung unten nur nicht zu überprüfen sein erlaubt:

[{:id 10 :name "Jessica"} {:id 10 :name "Erica"}] 
+0

können Sie mehr Kontext geben? Versuchen Sie, Beispieldaten zu generieren? Oder versuchen Sie eine Funktion zu testen? Könnten Sie einfach eine einzelne Karte mit ID als Schlüssel und NAME als Wert verwenden? Könnten Sie zuerst eindeutige IDs erstellen und dann jeder ID zufällige (möglicherweise nicht eindeutige) Namen zuordnen? –

Antwort

3
(s/def ::id (s/int-in 0 40)) ; just for testing purposes 
(s/def ::name string?) 
(s/def ::user (s/and (s/keys :req-un [::id ::name]))) 
(s/def ::user-list (s/and 
         (s/coll-of ::user :distinct true :into []) 
         #(if (empty? %) true (apply distinct? (mapv :id %))))) 

(deftest so-test 
    (let [users [{:id 11 :name "Jessica"} {:id 11 :name "Erica"}]] 
     (prn (g/generate (s/gen ::user-list))) 
     (s/assert ::user-list users))) 
Verwandte Themen