【问题标题】:FileNotFound exception while running Midje tests运行 Midje 测试时出现 FileNotFoundexception
【发布时间】:2017-03-26 02:37:52
【问题描述】:

我有一个使用 Midje 库进行测试的 Leiningen 项目。但是我无法运行任何测试,以防lein test 我得到

java.io.FileNotFoundException: Could not locate midje/sweet__init.class or midje/sweet.clj on classpath

或者用lein midje test我得到

java.io.FileNotFoundException: Could not locate midje/util/ecosystem__init.class or midje/util/ecosystem.clj on classpath

所以我猜这是因为我错误地定义了带有依赖项的 dev 配置文件,但我不确定真正的问题在哪里。

作为奖励,我也无法让environ 工作,我总是得到nil,我想从env 地图中提取一些属性(这可能也是同样的问题)。

我的project.clj

(defproject
  project
  "0.1.0-SNAPSHOT"
  :dependencies
   [[org.clojure/clojure "1.8.0"]
   [environ "1.1.0"]
   ;; other deps, midje is not there
   :repl-options
      {:init-ns mailing.repl}
   :jvm-opts
      ["-server"]
   :plugins
      [[lein-ring "0.8.13"]
       [lein-environ "1.0.0"]
       [lein-ancient "0.5.5"]
       [migratus-lein "0.4.2"]] 
   :ring
     {:handler mailing.handler/app,
   :init mailing.handler/init,
   :destroy mailing.handler/destroy}
   :profiles
      {:uberjar {:omit-source true, :env {:production true}, :aot :all},
       :production
      {:ring {:open-browser? false, :stacktraces? false, :auto-reload? false}},
      {:dev
        {:env 
          {:db-user "user" 
           :db-password "psswd"
           :db-classname "org.postgresql.Driver"
           :db-subprotocol "postgresql"
           :db-subname "//localhost/mailer"}}}
      {:dependencies
[[ring-mock "0.1.5"]
 [ring/ring-devel "1.3.1"]
 [midje "1.6.3"]],
:env {:dev true}}}
  :migratus {
         :store :database
         :migration-dir "migrations"
         :db {
              :classname "org.postgresql.Driver"
              :subprotocol "postgresql"
              :subname "//localhost/mailer"
              :user "usr"
              :password "psswd"}}
;; refer to user and psswd from project
:min-lein-version "2.0.0")

【问题讨论】:

  • 您的开发依赖项似乎不在 :dev 配置文件块内。
  • 是的,我也注意到了,但如果我把它放在那里,我会得到Map literal must contain an even number of forms。所以我不确定什么是正确的语法

标签: testing clojure leiningen midje


【解决方案1】:

我没有尝试过,但结构看起来不太正确。我认为应该是这样的:

(defproject project "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [environ "1.1.0"]]
  ;; other deps, midje is not there
  :repl-options {:init-ns mailing.repl}
  :jvm-opts ["-server"]
  :plugins [[lein-ring "0.8.13"]
            [lein-environ "1.0.0"]
            [lein-ancient "0.5.5"]
            [migratus-lein "0.4.2"]]
  :ring {:handler mailing.handler/app
         :init mailing.handler/init
         :destroy mailing.handler/destroy}
  :profiles {:uberjar {:omit-source true
                       :env {:production true}
                       :aot :all}
             :production {:ring {:open-browser? false
                                 :stacktraces? false
                                 :auto-reload? false}}
             :dev {:env {:db-user "user"
                         :db-password "psswd"
                         :db-classname "org.postgresql.Driver"
                         :db-subprotocol "postgresql"
                         :db-subname "//localhost/mailer"
                         :dev true}
                   :dependencies [[ring-mock "0.1.5"]
                                  [ring/ring-devel "1.3.1"]
                                  [midje "1.6.3"]]}}
  :migratus {:store :database
             :migration-dir "migrations"
             :db {:classname "org.postgresql.Driver"
                  :subprotocol "postgresql"
                  :subname "//localhost/mailer"
                  :user "usr"
                  :password "psswd"}}

   ;; refer to user and psswd from project
   :min-lein-version "2.0.0")

看起来您靠近顶部的:dependecies 块格式错误(没有关闭]),并且开发依赖项实际上与:dev 配置文件无关。我不确定:migratus 是否属于:dev 配置文件,所以在上面的示例中它不在它的范围内。

FWIW,Leiningen 存储库中的 sample project 文件是一个有用的资源。

【讨论】:

  • 尝试听从您的建议,但错误仍然存​​在pastebin.com/9uLX038t
  • 您是否尝试过使用我上面给出的示例?如果没有,那么您可能没有修复第一个:dependencies 块,这也是一个问题。另外,你能把它归结为一个更小的例子吗?如果是这样,我可以稍后再看看并提供帮助。除此之外,我最好的建议是尝试以最低限度创建一个新的defproject 块,看看你是否可以运行一些东西,然后从那里开始构建。
  • 是的,这是我甚至在我在这里询问之前就研究过的资源,并且我玩了几个小时的设置。这就是我去 SO 的原因,因为我真的不知道如何让 Leiningen 相信 Midje 真的在那里。但我会尝试使用不太复杂的设置,我会看到的,谢谢。
  • 呸,我也搞砸了 :dev 依赖项。这次我用它在正确的位置更新了defproject,并更改了格式,以便更容易看到东西的位置。希望它能帮助并解决您的问题。
  • 谢谢你,你的改变最后真的对我有用(我也不得不将 lein-midje 放到插件中)。
猜你喜欢
  • 1970-01-01
  • 2018-09-21
  • 2017-12-29
  • 2019-10-19
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
相关资源
最近更新 更多