【发布时间】:2014-07-02 08:58:53
【问题描述】:
我有一个函数 param-values,当它在 Liberator 上下文中找不到键时,它会抛出一个 IllegalArgumentException。我对此有一个 clojure.test 单元测试:
(testing "Non-existing key"
(is (thrown? IllegalArgumentException (param-values ctx [:baz]))))
由于某种原因,此测试失败,即使我可以看到我的函数在 REPL 中的行为正确:
user> (param-values ctx [:baz])
IllegalArgumentException Missing required param baz resources/param-value (resources.clj:57)
user> (is (thrown? IllegalArgumentException (param-values ctx [:baz])))
FAIL in clojure.lang.PersistentList$EmptyList@1 (form-init2687593671136401208.clj:1)
expected: (thrown? IllegalArgumentException (param-values ctx [:baz]))
actual: nil
param-values本身就很简单;它只是用param-value 映射到指定的参数:
(defn param-values [ctx args & [{:keys [optional-args] :as opts}]]
(let [params (or (get-in ctx [:request :params]) {})
args (concat args optional-args)]
(map #(param-value params % opts) args)))
当然,我对param-value有更深入的测试,其中之一是:
(testing "Arg not present"
(is (thrown-with-msg?
IllegalArgumentException #"Missing required param baz"
(param-value {} :baz))))
这个测试通过了!
什么给了?我正在做的事情与clojure.test/is 宏无关吗?是不是我的错字太粗了看不出来?
【问题讨论】:
标签: unit-testing clojure