0

我正在尝试验证 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强制泄漏并咬我吗?

或者它可能是完全不同的东西?

4

1 回答 1

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?

就像您以相同的名称注册更多规范密钥等时一样。

于 2020-10-01T14:49:19.463 回答