0

我不熟悉在 Clojure 中模拟是如何工作的。具体来说,我不确定应该如何测试实现 sqlKorma 查询或调用数据库的函数?理想情况下,我希望能够在我的测试中模拟 sqlKorma。

(defn fetch [id]
(->
    (korma/select* :my-table)
    (korma/where {:id id})
    (korma/exec)))

(defn retrieve [id]
  (->
    (fetch id)
    (ring/response)))

我正在使用 Speclj 来测试我的应用程序。

(describe "item"
      (it "is fetched"
          (let [fetched (fetch :test-case)] ;here I want to be able to mock sqlKorma and return an array of 1.
          (should= (count fetch) 1)))

      (it "is retrieved"
          (let [retrieved (retrieve :test-case)]
          (should= (get retrieved :status) 200))))
4

1 回答 1

1

有几种方法。一种方法是使用不同的数据库进行测试。例如,内存数据库中的 H2。这是首选,因为您不需要模拟并且您也可以测试您的 SQL。如果你真的仍然想模拟你的fetch函数,你可以使用with-redefs

(defn foo [] [{:foo "bar"}])
(foo) ;;=> [{:foo "bar"}]
(with-redefs [foo (fn [] [{:something "else"}])] (foo))
 ;;=> [{:something "else"}]
(foo) ;;=> [{:foo "bar"}]

https://clojuredocs.org/clojure.core/with-redefs

于 2018-02-27T10:05:31.313 回答