我正在尝试验证Spec中的大型Clojure数据结构。
我在这方面失败了:
{:pageName "HelloWorld" :pageType ::workPage :cells ["Hello World" "How are you?"]}
使用此:
(s/def ::WorkPage (s/keys :req-un [::pageName ::pageType ::cells]))
此消息失败(来自解释)
{:pageName "HelloWorld", :pageType :assemblage.db/workPage, :cells ["Hello World" "How are you?"]} db.js:52:1
false db.js:54:1
-- Spec failed --------------------
[:pageName "HelloWorld"]
^^^^^^^^^^^^^^^^^^^^^^^^
should satisfy
map?
如果我在REPL中单独运行上述规范,它将起作用。
但是在上下文中(在clojurescript文件中),看起来好像数据结构在被测试之前就已经被转换成向量。
以前有人看过这样的东西吗?
这可能是在ClojureScript中执行此操作的结果吗?这是一些怪异的javascript强制泄漏并咬我吗?
还是可能完全不同?
答案 0 :(得分:0)
我相信这张地图的Spec定义:
{:pageName "HelloWorld" :pageType ::workPage :cells ["Hello World" "How are you?"]}
应类似于:
(s/def ::my-map (s/keys :req-un [::pageName ::pageType ::cells]))
可以这样使用:
(s/valid? ::my-map {:pageName "HelloWorld" :pageType ::workPage :cells ["Hello World" "How are you?"]})
在您的帖子中-您已经在地图内部获得了定义的键,这可能会导致问题。
Spec失败(至少在JS端),通常是:
should satisfy map?
就像当您以相同的名称等注册更多规范密钥时一样。