2

在我的测试中,我使用类似的东西:

;; api.utils
(defn wrap-test-server [f]
  (start-test-server)
  (f)
  (stop-test-server))

;; api.some-endpoint
(use-fixtures
  :once
  utils/wrap-test-server)

但是,我必须在每个测试模块中复制夹具设置代码。

如何为所有测试设置全局夹具?
或者甚至更好,对于“包”,以便测试api.*包含在启动/停止夹具中。

请注意,在这种情况下,我不关心包装“级别”。以下都可以工作:

;; Wrap around all the tests in the package:
(start-test-server)
(test-1)
...
(test-n)
(stop-test-server)
;; Wrap every test in the package:
(start-test-server)
(test-1)
(stop-test-server)
...
(start-test-server)
(test-n)
(stop-test-server)
4

1 回答 1

2

您绝对可以将该函数拉入另一个命名空间并以这种方式重新使用它并执行以下操作:

(defn one-time-setup [f]
    (start-test-server)
    (f)
    (stop-test-server))

(use-fixtures :once one-time-setup)

这篇博总结得很好。从帖子:

一个:once夹具 - 将在任何测试运行之前调用的方法,并将传递一个函数来调用,该函数将调用所有测试。

于 2016-02-14T17:29:51.590 回答