问题描述
我正在尝试使用自定义宏连接到 cljs.test
报告系统。我正在遵循 cljs.test/deftest
中的模式:
- https://cljs.github.io/api/cljs.test/deftest
- https://github.com/clojure/clojurescript/blob/r1.10.773-2-g946348da/src/main/cljs/cljs/test.cljc#L230-L246
复制和使用 deftest 工作得很好。但是,如果我只是创建自己的测试宏 defspec-test 并返回结果,则会收到错误 Cannot read property 'test' of undefined
。有人知道这里发生了什么吗?
之前出现过 this question 的变体(在 Clojure 中)。但现在我正在尝试解决 Clojurescript 并遇到此错误。
util.cljc
(defmacro deftest2 [name & body]
(when cljs.analyzer/*load-tests*
`(do
(def ~(vary-Meta name assoc :test `(fn [] ~@body))
(fn [] (cljs.test/test-var (.-cljs$lang$var ~name))))
(set! (.-cljs$lang$var ~name) (var ~name)))))
(defmacro defspec-test [name sym-or-syms]
(when cljs.analyzer/*load-tests*
`(do
(def ~(vary-Meta name assoc :test `(fn [] ~sym-or-syms))
(fn [] (cljs.test/test-var (.-cljs$lang$var ~name))))
(set! (.-cljs$lang$var ~name) (var ~name)))))
mytest.cljs
(deftest2 zoobar
(t/is (= 1 1)))
(defspec-test coocoobar
(t/is (= 1 1)))
运行结果
Testing mytest
ERROR in (coocoobar) (TypeError:NaN:NaN)
Uncaught exception,not in assertion.
expected: nil
actual: #object[TypeError TypeError: Cannot read property 'test' of undefined]
Ran 2 tests containing 2 assertions.
0 failures,1 errors.
解决方法
好的,想通了这一点。由于我使用了 specter macro + 导航器,它失败了。我不确定如何。但不知何故,这弄乱了 test.check 生成器。
我假设这是某种奇怪的相互作用,在 Clojurescript 的宏系统中是行不通的。