私のデータベースには、次のような列 dob があります。
| dob |
+------------+
| 1935-06-05 |
TDD の場合、korma と lobos を使用してインメモリ H2 データベースに対してテストします。
(:use (lobos [migration :only [defmigration]] core schema config)
( :require [korma.core :as k] )
(defmigration create-table-readings
(up [] (create
(table :readings
(date :dob :not-null)
)))
(down [] (drop
(table :readings))))
(defn insert
[row]
(k/insert readings (k/values row)))
日付文字列との間で変換するためのヘルパー f-tion があります。
(:require
[clj-time.core :as t]
[clj-time.format :as f]
[clj-time.coerce :as c])
(def custom-formatter (f/formatter "yyyy-MM-dd"))
(defn from-sql-to-string
"formats date from sql date to string"
[sql-time]
(f/unparse custom-formatter
(c/from-sql-date sql-time)))
(defn from-string-to-sql
"formats date string and returns sql date"
[string-time]
(c/to-sql-date string-time))
それでも、何らかの方法で保存と取得をテストすると、日付の間に常に1日の違いが生じます。
(deftest database-insert-tests
(testing "Testing simple insert"
(let [test-row { :dob "1935-06-05" }]
(database/insert test-row)
(let [first-row (first (database/select-all))]
(is (= test-row
(assoc first-row
:dob
(t/from-sql-to-string (:dob first-row)))
))))))
失敗: 実際: (ない (= { :dob "1935-06-05" } { :dob "1935-06-04" }))