Clojure 将值传递给每个speclj spec?
我希望在每个规范之前启动一个服务,并在每个规范之后关闭它。同时,我希望每个规范能够使用规范中的Clojure 将值传递给每个speclj spec?,clojure,speclj,Clojure,Speclj,我希望在每个规范之前启动一个服务,并在每个规范之后关闭它。同时,我希望每个规范能够使用规范中的服务。例如(这不起作用): 如何做到这一点?我看不到speclj对它的直接支持,而且它的内部设计不允许用这种功能扩展它。但是,您可以使用动态范围来实现它: (declare ^:dynamic *service*) (describe "Something" (around [it] (binding [*service* (start!)] (try (
服务
。例如(这不起作用):
如何做到这一点?我看不到speclj对它的直接支持,而且它的内部设计不允许用这种功能扩展它。但是,您可以使用动态范围来实现它:
(declare ^:dynamic *service*)
(describe
"Something"
(around [it]
(binding [*service* (start!)]
(try
(it)
(finally
(shutdown! *service*)))))
(it "is true"
(println *service*)
(should true))
(it "is not false"
(should-not false)))
*服务*
变量将绑定到绑定
范围内的(开始!)
的结果。顺便说一句,这似乎是speclj示例中的一个类似示例(查看*答案*
变量)。这种方法是否比仅仅将服务定义为一个原子更好?IMHO,最好的选择是支持将测试夹具状态作为参数传递给测试函数。但是由于speclj的设计,这是不可能的,我更倾向于使用动态范围变量,因为其目的更清楚,它是为了为绑定
表单的指定范围设置的,不应该是供代码的其他部分使用的共享全局状态。
(declare ^:dynamic *service*)
(describe
"Something"
(around [it]
(binding [*service* (start!)]
(try
(it)
(finally
(shutdown! *service*)))))
(it "is true"
(println *service*)
(should true))
(it "is not false"
(should-not false)))