问题标签 [clojure.spec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojure - Clojure.spec “或”等价于“s/and”
我很喜欢和clojure.spec
; 它有助于发现更接近原因的数据错误。目前我正在使用它来验证对 Web 服务器请求的响应,但是我在 clojure.spec 操作的语法上遇到了困难,该操作将允许两个不同的地图结构响应。
在我的数据中,Web 服务器请求有两种可能的响应:
{:assignment "1232123"}
和
{:no-more-assignments true}
我可以使用multi-spec
,但这对于一些简单的事情来说似乎很冗长,例如为每种情况都有一个规范并将规范定义为:
是否有一些我忽略或需要使用的语法multi-spec
?
clojure - 使用 Clojure Spec 检查缺点的类型一致性?
如果我经营一个有借书人和书籍的图书馆:
我想要一个将项目添加到任一集合的通用函数:
我如何编写一个规范以确保我不能向借款人添加一本书,反之亦然?
因为这个规范:
不管用。:-(
感谢您的帮助!
clojure - Clojure 规范和解构?
不确定如何编写规范来检查函数的解构参数。
如果我有这个简单的功能:
我为这个论点写了这个规范:
它工作正常:
但是当我尝试将它应用于这样的函数时:
它爆炸了:
如何使用 Spec 编写函数::vstring2
?还是我?
谢谢你。
clojure - Clojure Spec - 与规范/或嵌套在规范/和中的问题
我最近一直在尝试 Clojure Spec 并遇到了意外的错误消息。我发现如果你有一个规范/或嵌套在一个规范中/然后规范函数,在规范/或分支之后,传递一个一致的值而不是顶级值。
您可以在此处的“v”的打印值中看到这一点(人为示例):
我认为这可能是从规范/和文档字符串故意的:
采用谓词/规范形式,例如
(s/甚至?#(< % 42))
返回一个规范,该规范返回符合的值。连续一致的值通过其余谓词传播。
但这对我来说似乎违反直觉,因为它会妨碍规范谓词的重用,因为需要编写它们以接受“[<or branch> <actual value>]”。
如果您有多个规范/或分支,情况会变得更糟:
我在这里错过了一些基本的东西吗?
clojure - Clojure Spec 和“在 100 次尝试后无法满足这样的谓词......”
假设您有 a::givee
和 a ::giver
:
那形成一个unq/gift-pair
:
然后你有一个:unq/gift-history
which is a vector
of unq/gift-pair
:
最后,假设您要替换其中的:unq/gift-pair
一个vector
:
一切正常:
直到我尝试stest/check
它:
我曾尝试使用s/int-in
限制向量计数(认为这可能是问题)但没有成功。
关于如何(stest/check `set-gift-pair-in-gift-history)
正确运行的任何想法?
谢谢你。
clojure - Clojure Specs 的正确嵌套?
我想我可能对函数中嵌套规范的正确顺序有疑问 - 特别s/with-gen
是s/or
......
我有这个功能和规格:
哪个测试正确:
并且它的参数正确地符合:
但是当这个“正确”的函数被第二个函数消耗时:
消费函数成为消费函数的错误来源(nil
我认为已经处理的情况):
我曾尝试更改消费函数中规范的顺序和分组(嵌套) - 但随后它未能通过它过去通过的测试,甚至在测试消费函数之前。
关于这里出了什么问题的任何想法?
谢谢!
编辑:
如建议的那样,这是完整的代码,以便更好地理解:
不幸的是,它并没有帮助我找到我的错误......
clojure - 为什么 Clojure Spec 会在这里陷入无限循环?
这是一个将视觉模式表示为 Sshapes 集合的应用程序。
Sshape(样式化形状)是点列表和样式信息图。
APattern 是包含 Sshapes 列表的记录。
这是规格:
在 sshape.clj
在groups.clj
然后在另一个文件中,我尝试测试将两个 APatterns 放在一起的叠加函数是否接受 APatterns
没有这个运行的前提条件。
有了前置条件,我得到了这个无限递归和堆栈溢出。
等等
更新 :
好的。我在 repl 中缩小了这个范围。
假设定义了一个点向量,pts
即
然后打电话
给我堆栈溢出:
所以它看起来只是因为我试图匹配一个 spec/* 的一个 spec/* 数字。
嵌套向量触发这种无限递归是否有某种原因?
clojure - 使用 ruby Rspec 测试 CRUD Clojure 函数
我刚刚完成了使用 Clojure 的前六周工作,到目前为止,我对这种语言非常满意。我正在使用 leiningen 和 PostgreSQL 开发我的个人博客。我已经可以发布新内容、上传文件并且我有会话、cookie 和角色,无论如何我认为此时我有足够的代码开始担心测试部分,但我有点卡住了,因为看起来很多clojure 的测试和规范方面正在发生一些事情。
所以我有这个功能:
该函数将地图作为参数,并提供最终地图以由 compojure 发送和处理。我来自 Rails 世界,因此在 Rails 中测试此功能的方法是创建一个 FactoryGirl 类,使用经典创建一个 Rspec 模型文件:
在其中比较预期的内容,然后从命令行运行 rspec 以获得绿线或红线。
从昨天开始,我正在尝试使用此文档使用 Clojure 复制该过程:
https://www.codesai.com/2018/03/kata-generating-bingo-cards
但我认为目前还没有一种“标准”的方式来进行测试,包括 Clojure 中的数据库(CRUD)部分。我什至不知道将规范文件放在哪里。我看到类似于 FactoryGirl 的 Clojure 库,但我不知道是否应该使用规范创建自己的数据结构,所以我不确定从哪里开始,有 clojure.test.check.generators 和规范生成器,但我不知道知道它们是否不同,或者我是否应该只使用规范而不是 clojure.test.check。我可以从命令行而不是在 REPL 中运行测试吗?
我的意思是:是否有关于如何测试一组 CRUD 功能的文档或教程?我想我只需要最初的 HOWTO,然后我可以从那里拿走它,我会为像我这样的新手写一个教程。
更新:
看起来 Midje 是我正在寻找的东西:
https://github.com/marick/Midje/wiki/A-tutorial-introduction
clojure - 为什么我不能在规范生成器中使用 char-alpha?
我正在使用一个看起来像这样的规范:
它在生成示例时工作正常,尽管经常达到 100 次尝试的限制。我真的想要一个gen/string-alpha
,虽然这个生成器不可用。
当我尝试做到这一点时:
...它说“向量的第一个参数必须是生成器”。
为什么gen/char-alpha
(指向 clojure.test.check.generators
)不起作用?
clojure - 使用 clojure 规范在运行时验证传入我的函数的匿名函数
假设我有一个a
以函数 ( fn
) 作为参数的函数:
(defn a [f] ....)
.
为了给调用者一个很好的错误消息,我会在运行时验证fn
参数。
这可能吗,我该怎么做?我可以在运行时fdef
这样做,然后在调用时对其进行检测,例如:
从哲学的角度来看,这是明智的还是有意义的?