这是测试core.async功能的可接受方式吗?

问题描述:

考虑以下单元测试片段:这是测试core.async功能的可接受方式吗?

(deftest async-test 
(testing "Testing some core.async functionality." 
    (go (is (= (<! (go "val")) "val1"))))) 

运行测试收率:

Ran 1 tests containing 0 assertions. 0 failures, 0 errors. 

FAIL in() (at repl:253:51) expected: (= (<! (go "val")) "val1") 
actual: (not (= "val" "val1")) 

但因为这是奇怪:(ⅰ)有1个断言在该试验中,还测试输出说有0,并且(ii)测试语句也说有0次失败,即使有1次失败。

我想这是因为(is...)声明是在一个去块。所以我的问题是,这是使用core.async功能进行单元测试的最佳方式吗?这里有一些我错过的最佳做法吗?

此问题不是core.async的独占,而是所有多线程代码。您需要确保测试断言由启动测试的线程运行,因为线程也收集并打印所有测试的结果。

在Clojure中的情况下,你只需要使用阻塞<!!操作:

(deftest async-test 
(testing "Testing some core.async functionality." 
    (is (= (<!! (go "val")) "val1"))) 

在ClojureScript的情况下使用async宏。 This有大量的关于测试细节在ClojureScript

(deftest async-test 
    (testing "Testing some core.async functionality." 
    (async done 
     (go 
     (is (= (<! (go "val")) "val1")) 
     (done))))) 
+0

我在例如使用ClojureScript(所以不能用' George

+0

它的工作原理 - 非常感谢将我指向“异步”宏的方向! – George