Die process-async
-Funktion, die innerhalb des midje
-Frameworks getestet wurde, führt zu inkonsistenten Ergebnissen. Die meiste Zeit über prüft es wie erwartet, aber von Zeit zu Zeit liest es out.json
in seinem Anfangszustand (""
). Ich verlasse mich auf die async-blocker
Funktion, um auf process-async
vor der Überprüfung zu warten.Inkonsistente Ergebnisse beim Testen einer Chan-Verarbeitungsfunktion
Was ist los mit meinem Ansatz?
(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)
)
)
)