Я написал код на Clojure, который производит данные транзакций Datomic, и я хотел бы написать несколько тестов, чтобы проверить, что данные созданы, как ожидалось.
По сути, мне нужно продемонстрировать это в отношении данных транзакции:
[{:db/id (d/tempid :db.part/user)
:some-field "Bob"}]
=
[{:db/id (d/tempid :db.part/user)
:some-field "Bob"}]
и
[{:db/id (d/tempid :db.part/user)
:ref-field (d/tempid :db.part/user -1)}
{:db/id (d/tempid :db.part/user)
:ref-field (d/tempid :db.part/user -1)}]
=
[{:db/id (d/tempid :db.part/user)
:ref-field (d/tempid :db.part/user -2)}
{:db/id (d/tempid :db.part/user)
:ref-field (d/tempid :db.part/user -2)}]
но
[{:db/id (d/tempid :db.part/user -1)
:some-field "Bob"}]
!=
[{:db/id (d/tempid :db.part/user -2)
:some-field "Bob"}]
Однако я не могу просто сравнить вывод с ожидаемым значением, так как я никогда не узнаю точный созданный DbId, пока он не будет создан кодом, а результат будет разным каждый раз, когда (d / tempid ...) вызывается в любом случае. Таким образом, проверки на равенство вернут false.
Есть ли у кого-нибудь мысли о том, как лучше всего сделать это в целом, чтобы его можно было запускать с любыми данными транзакции (например, работает с данными вложенных транзакций)?
Я подумал о создании собственного типа MockDbId с переопределенным методом equals, а затем переопределении (d / tempid ...) в тестах, чтобы вернуть этот фиктивный идентификатор, но это не похоже на хороший способ добиться желаемого поведения.
Любой совет будет очень признателен.
Спасибо,
Мэтт.