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)))
Другие вопросы по тегам