3

您如何设置引导以便:(a)所有源文件都在当前目录中,(b)每次源文件更改时运行单元测试,(c)REPL 在包含它们的源文件更改时刷新定义?

具体来说:

  • 什么进去build.boot

  • 启动 REPL 的 shell 命令是什么?和/或 REPL 中的什么命令开始监视单元测试?

  • 我还需要做哪些其他常规设置?

我已经阅读了很多关于bootboot-testboot-quick-testREPL reloading in bootboot-refresh的文档,但是我还没有做很多工作。到目前为止,我发现的文档似乎提供了花絮和提示,但没有提供将这些东西放在一起所需的东西。

一个适当的build.boot(以及其他任何东西)的简单示例将特别有帮助。


到目前为止,这就是我所拥有的(某种)作品。

(set-env!
  :dependencies '[
    [adzerk/boot-test "1.1.2" :scope "test"]
    [org.clojure/tools.namespace "0.2.11"]]
  :source-paths #{"."})

(require '[clojure.tools.namespace.repl :as repl :refer [refresh]])
(apply repl/set-refresh-dirs (get-env :directories))

在当前目录中加一个文件,sample.clj

(ns sample
  (:require [clojure.test :refer :all]))

(defn myfunc [] "this string")

(deftest test-myfunc
  (is (= "this string" (myfunc))))

这会启动以在当前目录中查找源文件,它使我能够sample.clj通过键入(refresh)REPL 手动重新加载更改。(boot (test))用于在.clj文件中手动运行单元测试,但我刚才尝试时失败了,错误“传递给核心/测试的 args (0) 数量错误”。

这样做的正确方法是什么?

4

1 回答 1

3

由于 Boot 如何处理监视和通知您无法clojure.tools.namespace.repl/refresh直接使用的文件更改。

您可以为其使用包装器-samestep/boot-refresh:

(set-env!
 :dependencies '[[adzerk/boot-test "1.1.2" :scope "test"]
                 [samestep/boot-refresh "0.1.0" :scope "test"]]
 :source-paths #{"."})

(require '[samestep.boot-refresh :refer [refresh]]
         '[adzerk.boot-test :refer :all])

现在您可以启动 REPL 服务器,它将在文件更改时重新加载:

boot repl -s watch refresh

并从您的 IDE(例如 CIDER 或 Cursive)或通过以下方式连接到它:

boot repl -c

并且每当检测到源文件发生更改时,将重新加载适当的命名空间并在您的客户端 REPL 会话中可用。

您还可以boot watch test在另一个终端中启动以获取自动测试行为。

最后,您将错误数量的 args (0) 传递给:core/test(boot (test))的问题是因为您不需要包含您想要调用的任务。看起来可能有可用的被调用。adzerk.boot-testtestclojure.test/test

于 2017-01-24T08:56:47.443 回答