如何检查模拟函数在 clojure with_redefs 中使用给定参数至少调用一次?

Ash*_*Ash 1 clojure clojure.spec

test-service/process如果不调用,我在下面编写的测试不会失败。而且它也不检查 URL 和参数是否正确。

(deftest main-func-test
    (let [event {:a 123}]
      (with-redefs
        [test-service/process (fn [url params] response)]
        (is (= :success (main/main-func event)))))
Run Code Online (Sandbox Code Playgroud)

在红宝石中这很简单

expect(test_service).to receive(:process).with(url, params).and_return(response)
Run Code Online (Sandbox Code Playgroud)

如何test-service/process在 Clojure 中检查是否使用两个参数 URL 和 params 至少调用一次?

Lee*_*Lee 5

您可以捕获模拟函数中的参数:

(deftest main-func-test
    (let [event {:a 123}
          args (atom nil)]
      (with-redefs
        [test-service/process (fn [url params] 
                                 (reset! args [url params])
                                 response)]
        (is (= :success (main/main-func event)))
        (is (= [expected-url expected-params] @args)))
Run Code Online (Sandbox Code Playgroud)