【问题标题】:Howto include cljs.spec'd functions in a test suite (Redux)如何在测试套件中包含 cljs.spec 的函数(Redux)
【发布时间】:2021-04-15 15:50:09
【问题描述】:

我正在尝试使用自定义宏连接到 cljs.test 报告系统。我正在遵循cljs.test/deftest 中的模式:

复制和使用 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.

【问题讨论】:

    标签: clojurescript clojure.spec clojure-testing


    【解决方案1】:

    好的,解决了这个问题。由于我使用了specter macro + 导航器,它失败了。我不确定如何。但不知何故,这搞砸了test.check generators。

    我假设这是某种奇怪的相互作用,在 Clojurescript 的宏系统中是行不通的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 2015-08-21
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多