【发布时间】:2016-06-06 02:40:08
【问题描述】:
我正在尝试基于 figwheel quickstart 进行单元测试的 clojurescript 项目,但添加了一些测试。我成功地尝试将基本的 cljs.test 用例(test-numbers 来自the cljs.test doc)直接添加到我的主文件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/main/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/test.cljs:
(ns wheel.test
(:require [cljs.test :refer-macros [deftest is testing run-tests]]))
(deftest test-numbers
(is (= 1 1)))
在致电lein clean 和rlwrap 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 命名空间中运行测试的结果完全相同。
还请注意,这是一个渐进的步骤 - 一旦我了解了它的工作原理,我打算为测试设置一个单独的构建配置,以便我可以单独运行测试 - 我只是尝试采取一些小步骤,并且我被这个卡住了。
【问题讨论】:
-
为了实验,如果你把
:main wheel.core改成:main wheel.test,有帮助吗?更改后也不刷新浏览器——这让我很头疼。 -
谢谢克里斯,我应该提到的,我确实尝试过。结果相同 - wheel.core 中的测试运行,而 wheel.test 中的测试出错。
-
要尝试的另一件事是拥有一个“test”的构建 ID,以及您已经拥有的“dev”。
-
welp,我能够添加一个“测试”构建 ID 并通过它的测试。但我无法在“dev”构建 id 下运行 相同的测试,即使“dev”和“test”现在具有完全相同的属性,除了它们的
output-to和output-dir键("resources/public..." vs "resources/test...") - 有没有我遗漏的 lein clean 没有处理的缓存? -
根据我的经验,每个构建都会提供一个
ns,您可以通过(in-ns the-ns)调用函数。从其他名称空间尝试会给出您得到的错误。因此,对于我想要 REPL (动词)的每个ns,我都有不同的构建ID。您可能会遇到同样的限制。
标签: testing clojurescript leiningen figwheel