在ClojureScript中测试core.async代码

时间:2015-10-22 04:43:45

标签: clojurescript

我正在尝试测试一些core.async代码,但是我在编写测试时遇到了麻烦。我的所有测试代码都在if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])) { ... } 块中,但看起来我的测试过程并没有按照我预期的方式停放。

go频道上进行放置后,我希望执行actions块,直到获取值,但go函数会立即运行这导致我的测试失败,因为is尚未更新。

这是我的测试代码:

state-atom

正在测试的代码:

(deftest tab-change
  (async done
         (go (>! state/actions (state/TabChange. :return))
             (is (= @state/state-atom {:tab :return}))
             (done))))

如果我将测试代码更改为使用(def actions (async/chan)) (declare update) (def state-atom (reagent/atom nil)) (go-loop [] (swap! state-atom (partial update (<! actions))) (recur)) (defprotocol Action (update [action state])) (defrecord TabChange [value] Action (update [_ state] (assoc state :tab value))) 和回调而不是put!块,则测试通过:

go

这显然不适用于更复杂的测试,所以我希望能够深入了解原始测试导致问题的原因。

0 个答案:

没有答案