我如何模拟 sqlKorma?
How do I mock sqlKorma?
我不熟悉 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))))
有几种方法。一种方法是使用不同的数据库进行测试。例如。内存数据库中的 H2。这是首选,因为您不需要模拟并且您也可以测试 SQL 。如果你真的还想模拟你的 fetch
功能,你可以使用 with-redefs
:
(defn foo [] [{:foo "bar"}])
(foo) ;;=> [{:foo "bar"}]
(with-redefs [foo (fn [] [{:something "else"}])] (foo))
;;=> [{:something "else"}]
(foo) ;;=> [{:foo "bar"}]
我不熟悉 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))))
有几种方法。一种方法是使用不同的数据库进行测试。例如。内存数据库中的 H2。这是首选,因为您不需要模拟并且您也可以测试 SQL 。如果你真的还想模拟你的 fetch
功能,你可以使用 with-redefs
:
(defn foo [] [{:foo "bar"}])
(foo) ;;=> [{:foo "bar"}]
(with-redefs [foo (fn [] [{:something "else"}])] (foo))
;;=> [{:something "else"}]
(foo) ;;=> [{:foo "bar"}]