Clojure "is" утверждение не работает, как ожидалось - PullRequest
5 голосов
/ 14 марта 2019

Я пишу контрольные примеры для моего первого проекта Clojure.Здесь я хочу, чтобы тест не прошел, если значение «: meat» пусто:

(deftest order-sandwich
  (let [response {:meat "" :bread "yes" :add-on "lettuce"}]
    (is (= (:bread response) "yes"))
    (is (not (nil? (:meat response))))))

Но мой тест успешно выполнен (возвращается «nil»).

Кто-нибудь знает, почему этопроисходит?Есть ли лучший способ сделать это?

Заранее благодарю!

1 Ответ

6 голосов
/ 15 марта 2019

Пустая строка не является 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)))
...