3

愚蠢的新手问题在这里。我创建了一个全新的 lein 项目,并尝试在“core_test.clj”文件中运行示例测试。我正在使用 emacs 和“nrepl-jack-in”。但是当我从 repl 运行“(run-all-tests)”时,我得到:

无法解析符号:此上下文中的 deftest,正在编译:(NO_SOURCE_PATH:1:1)

有趣的是,测试适用于这两种情况:
1)命令行中的“lein test”
- 或 -
2)如果我事先在 repl 中放入以下行:

(ns my-prog.core-test (:require [clojure.test :refer :all] [my-prog.core :refer :all]))

有趣的是,这一行在“core_test.clj”文件本身中,但我猜它出于某种原因没有进行评估。我在 emacs 中使用 Ctrl-x Ctrl-e 评估缓冲区,但它似乎没有读取命名空间规范。

4

2 回答 2

2

你会想用它C-c C-k来评估你的整个缓冲区。它一次性加载文件。或者,您可以require在 REPL 中使用您需要的名称空间,可能会传入:reload:reload-all导致重新加载先前加载的名称空间。(你也可以先给require你的命名空间一个别名(require '[foo.core :as foo])——然后使用和弦重新加载。)

C-x C-e仅对评估单个表达式的值真正有用。这样做的好处是这些表达式不需要存在于顶层。(例如,您可以(comment ...)在文件中放置一个包含一些有用测试表达式的部分,然后C-x C-e根据 JVM 的当前状态来检查它们的值。)

于 2013-07-21T12:04:30.090 回答
1

我不确定你是否解决了这个问题,但我最近在升级一个依赖 Clojure 1.2 的旧库时遇到了这个问题。过了一会儿,我意识到:refer :all语法是在 Clojure 1.4 中添加的。这个问题有两种解决方案:

  • 升级到 Clojure 1.4+:

    project.clj更新依赖项时,例如[org.clojure/clojure "1.4.0"]切换到 Clojure 1.4。

  • 改为使用use;在这种情况下,命名空间声明将是:

    (ns my-prog.core-test 
      (:use [[clojure.test] 
             [my-prog.core]))
    

希望有帮助!

于 2013-11-20T20:41:57.753 回答