1
我想写这样一个测试:使用core.async进行测试 - 在测试中刷新块?
(deftest login-form-rendering
(async done (with-redefs [http/post fake-login-success]
(with-mounted-component (c/login-form login!)
(fn [c div]
(.click (.getElementById js/document "Login"))
(is (= (:page @app-state) :location)))))
(done)))
我有这样的模拟:
(defn fake-login-success [& _]
(let [ch (chan)
response {:status 200}]
(go (>! ch response)
ch)))
登录功能做到这一点:
(defn login! [username password]
(go (let [result (->> {:form-params {:username @username :password @password}}
(http/post "/api/login")
(<!))
{status :status body :body} result]
(case status
401 (swap! app-state assoc :page :bad-login)
200 (swap! app-state assoc :page :location)))))
登录表单试剂接收onClick回调的组件。应用程序状态是一个全局访问的原子。
我面临的问题是,登录内的去块!永远不会执行。有什么我需要做的冲洗频道或什么?
我看到这里还有一个类似的未答复的问题:Testing core.async code in ClojureScript。一个区别似乎是我的测试代码中没有明确的通道。这是由cljs-http文章生成的。