Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 将值传递给每个speclj spec?_Clojure_Speclj - Fatal编程技术网

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)))