unit testing - clojure.test (is (thrown? ...) not seeing exception -


i have function param-values throws illegalargumentexception when cannot find key in liberator context. have clojure.test unit test this:

(testing "non-existing key"    (is (thrown? illegalargumentexception (param-values ctx [:baz])))) 

for reason, test failing, though can see function behaving correctly in 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 quite simple; maps on specified args 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))) 

of course, have more in-depth tests param-value, 1 of is:

(testing "arg not present"     (is (thrown-with-msg?          illegalargumentexception #"missing required param baz"          (param-value {} :baz)))) 

this test passes!

what gives? i'm doing not jiving clojure.test/is macro? have typo i'm thick see?

is because param-values returns lazy sequence?

when using thrown-with-msg? calls re-find on return value of (param-value {} :baz) , evaluates lazy sequence. not happen when using thrown? instead.

so try instead:

(is (thrown? illegalargumentexception       (doall (param-values ctx [:baz])))) 

doall evaluate lazy sequence.


update based on comments:

as not interested in return value of lazy sequence, side effects (throwing exception), it's preferred use dorun instead of doall.


Comments

Popular posts from this blog

google api - Incomplete response from Gmail API threads.list -

Installing Android SQLite Asset Helper -

Qt Creator - Searching files with Locator including folder -