无法从留言板应用中的hashmap获取密钥

时间:2017-03-04 21:49:54

标签: clojure luminus

我正在玩luminus留言簿应用。 我在g.test.db.core.clj中添加了一些日志记录语句来查看数据结构的键。看看"预期的关键"和"实际键"下方。

(deftest test-messages
  (jdbc/with-db-transaction [t-conn db/conn]
                            (jdbc/db-set-rollback-only! t-conn)
                            (let [timestamp (java.util.Date.)]
                              (is (= 1 (db/save-message!
                                         {:name      "Bobby"
                                          :message   "Hello World!"
                                          :timestamp timestamp}
                                         {:connection t-conn})))
                              (let [actual (-> (db/get-messages {} {:connection t-conn}))
                                    expected {:name      "Bobby"
                                              :message   "Hello World!"
                                              :timestamp timestamp}]
                                (log/info "Expected Keys")
                                (pprint (keys expected))
                                (log/info "Actual Keys")
                                (pprint (keys actual))  ;;<--this is the problem
                                (is (= actual
                                       expected))))))

&#34;预期密钥&#34;打印正常,但我得到了#34;实际键&#34;

的运行时异常
  

[2017-03-04 14:31:28,076]预期钥匙   (:name:message:timestamp)

     

[2017-03-04 14:31:28,089]实际密钥

     

lein test:仅限guestbook.test.db.core / test-messages

     

错误(测试消息)(:)未捕获异常,不在断言中。   expected:nil actual:java.lang.ClassCastException:null at [empty   堆栈跟踪]

     

lein test guestbook.test.handler

但是,如果我这样做: (pprint actual) 我得到了我想要的东西:

({:id 35,
  :name "Bobby",
  :message "Hello World!",
  :timestamp #inst "2017-03-04T04:31:01.030000000-00:00"})

发生了什么事?为什么我不能从数据库返回的数据结构中打印密钥?

1 个答案:

答案 0 :(得分:0)

看起来实际是列表而不是地图。试试(-> actual first keys pprint)