如何从figwheel repl中的测试目录运行cljs.test案例?

时间:2016-02-24 01:11:41

标签: testing clojurescript leiningen figwheel

我试图开始使用经过单元测试的clojurescript项目,基于figwheel quickstart,但添加了一些测试。我成功地尝试将基本的cljs.test案例(the cljs.test doc中的test-numbers)直接添加到我的主文件core.cljs中。然而,当我把它分成另一个文件进行测试时,我无法从figwheel repl中运行它。以下是相关文件的当前状态,以及我的repl交互。我需要更改哪些内容,以便可以在与实现不同的文件中进行可运行测试?

project.clj:

(defproject wheel "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.7.0"]
                 [org.clojure/clojurescript "1.7.170"]]
  :hooks [leiningen.cljsbuild]
  :plugins [[lein-cljsbuild "1.1.2"]
            [lein-figwheel "0.5.0-1"]]
  :clean-targets ^{:protect false} [:target-path "out" "resources/public/cljs"]
  :cljsbuild {
    :builds [{:id "dev"
              :source-paths ["src/main" "src/test"]
              :figwheel true
              :compiler {:main "wheel.core"
                         :asset-path "cljs/out"
                         :output-to "resources/public/cljs/main.js"
                         :output-dir "resources/public/cljs/out"}}]})

的src /主/ core.cljs:

(ns wheel.core
  (:require[cljs.test :refer-macros [deftest is testing run-tests]]))

(.log js/console "Hey Seymore")

(deftest test-dev-numbers
  (is (= 1 1)))

的src /测试/ test.cljs:

(ns wheel.test
  (:require [cljs.test :refer-macros [deftest is testing run-tests]]))

(deftest test-numbers
  (is (= 1 1)))
致电lein cleanrlwrap lein figwheel之后

cljs.user=> (in-ns 'wheel.core)
nil
wheel.core=> (run-tests)

Testing wheel.core

Ran 1 tests containing 1 assertions.
0 failures, 0 errors.
nil
wheel.core=> (test-dev-numbers)
nil
wheel.core=> (in-ns 'wheel.test)
nil
wheel.test=> (run-tests)

Testing wheel.test
#object[TypeError TypeError: Cannot read property 'test_numbers' of undefined]
wheel.test=> (test-numbers)
#object[TypeError TypeError: Cannot read property 'test_numbers' of undefined]
wheel.test=> 

我期望在wheel.test名称空间中运行测试的结果完全相同,就像在wheel.core名称空间中运行它们一样。

请注意,这是一个增量步骤 - 一旦我理解了它是如何工作的,我打算为测试设置一个单独的构建配置,这样我就可以单独运行测试了 - 我只是想尝试一小步,我坚持这个。

1 个答案:

答案 0 :(得分:1)

根据我的经验,每个构建都提供了一个ns,您可以(in-ns 'the-ns)来调用函数。尝试使用其他命名空间会产生错误。因此,对于我想要REPL(动词)的每个ns,我有一个不同的构建ID。您可能遇到了同样的限制。

(以上只是讨论的最后评论)。