7
說我有以下規格:使用Clojure的規格與Datomic實體
(s/def :person/age number?)
(s/def :person/name string?)
(s/def ::person (s/keys :req [:person/name :person/age]))
然後我從Datomic提取實體:
(def person-entity (d/entity (d/db conn) [:person/name "Mr entity"]))
如果我嘗試用它失敗,因爲該規範檢查一致性實體不是地圖:
(s/explain ::person person-entity)
val: #:db{:id 17592186069950} fails spec: :some-ns/person predicate: map?
我的應用程序具有以實體作爲參數並希望void必須將實體化爲映射到各處才能讓spec規範工具在開發中工作。
我應該如何通過規範驗證實體?
好問題。找到這個問題的解決方案之後,難道你不會遇到命名空間的問題嗎?實體映射將如下所示:'{:person/name「Mr. Entity」}',除非這些定義碰巧是''(s/keys:req [:: name :: age]),在'(ns person)'中。但是這迫使你定義一堆頂級包名稱空間,這看起來不合理。 – Marc
Thanks @Marc,我已經更新了這個例子。 – Odinodin