我有一个要测试的异步基座拦截器:
(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
我尝试了另一种解决方案,在测试后的拦截器中添加测试:
(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
而不是 chan,我无法将其包装在 aas/<!!
中以阻塞,直到它终止。
在这一点上,我被困住了。我能做些什么来测试这种拦截器吗?