midje
프레임 워크 내에서 테스트 된 process-async
함수가 일치하지 않는 결과를 생성합니다. 대개의 경우 예상대로 검사하지만 가끔씩 out.json
이 초기 상태 (""
)로 읽습니다. 나는 확인하기 전에 process-async
을 기다리는 async-blocker
함수에 의존한다.chan 처리 함수를 테스트 할 때 일치하지 않는 결과
내 접근 방식에 어떤 문제가 있습니까?
(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)
)
)
)