La fonction process-async
testée dans le cadre midje
produit des résultats incohérents. La plupart du temps, il vérifie comme prévu, mais de temps en temps, il lit out.json
à son état initial (""
). Je compte sur la fonction async-blocker
pour attendre process-async
avant de vérifier.Résultats incohérents lors du test d'une fonction de traitement chan
Quel est le problème avec mon approche?
(require '[[test-with-files.core :refer [with-files public-dir]])
(defn async-blocker [fun & args]
(let [chan-test (chan)]
(go (>! chan-test (apply fun args)))
(<!! chan-test)))
(defn process-async
[channel func]
(go-loop []
(when-let [response (<! channel)]
(func response)
(recur))))
(with-files [["/out.json" ""]]
(facts "About `process-async"
(let [channel (chan)
file (io/resource (str public-dir "/out.json"))
write #(spit file (str % "\n") :append true)]
(doseq [m ["m1" "m2"]] (>!! channel m))
(async-blocker process-async channel write)
(clojure.string/split-lines (slurp file)) => (just ["m1" "m2"] :in-any-order)
)
)
)