我正在尝试测试一些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
这显然不适用于更复杂的测试,所以我希望能够深入了解原始测试导致问题的原因。