Clojure "is" утверждение не работает, как ожидалось
Я пишу контрольные примеры для моего первого проекта Clojure. Здесь я хочу, чтобы тест не прошел, если значение ":meat" пусто:
(deftest order-sandwich
(let [response {:meat "" :bread "yes" :add-on "lettuce"}]
(is (= (:bread response) "yes"))
(is (not (nil? (:meat response))))))
Но мой тест проходит успешно (возвращает ноль) .
Кто-нибудь знает, почему это происходит? Есть лучший способ сделать это?
Я благодарю вас заранее!!
1 ответ
Решение
Пустая строка не nil
:
(nil? "")
=> false
Вы хотите проверить, если он пуст, а не nil
, что можно сделать с помощью seq
или же empty?
(среди прочих способов):
(is (not (empty? (:meat response))))
; Or use not-empty
; There's also the arguably more idiomatic way
(is (seq (:meat response)))