У меня есть асинхронный c Перехватчик пьедестала, который я хочу проверить:
(def my-interceptor
(io.pedestal.interceptor/interceptor
{:name :my-interceptor
:enter (fn [context]
(as/go
(do
(Thread/sleep 1000)
(assoc context :answer 42))))}))
Сначала я попробовал наивный тест:
(deftest my-test
(is (= 42
(:answer (io.pedestal.interceptor.chain/execute {} [my-interceptor])))))
Это не работает, потому что chain/execute
возвращает nil
при наличии асинхронных c перехватчиков. Я попробовал другое решение, добавив тест в перехватчик сразу после тестируемого:
(deftest my-test
(io.pedestal.interceptor.chain/execute
{}
[my-interceptor
(io.pedestal.interceptor/interceptor
{:name :test
:enter (fn [context]
(is (= 41 (:answer context))) ; should fail
context)})]))
Однако это не работает, потому что тест завершается до того, как тест будет выполнен, и, таким образом, успешно ... даже если тест не пройден через секунду после:
Ran 1 test containing 0 assertions.
No failures.
FAIL in (my-test) (somefile_test.clj:49)
expected: (= 41 (:answer context))
actual: (not (= 41 42))
На практике мой набор тестов (с использованием Kaocha) не работает, потому что есть deftest
без подтверждения.
Учитывая, что chain/execute
возвращает nil
и не чан, я не могу обернуть его в as/<!!
, чтобы заблокировать, пока он не закончится.
В этот момент я застрял. Могу ли я что-нибудь сделать, чтобы проверить такие перехватчики?