Datomicトランザクションデータを生成する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"}]
しかし、私は単純に比較することはできません予想された値を出力します.cによって生成されるまで作成された正確なDbIDはわかりません(d/tempid ...)が呼び出されるたびに結果が異なります。したがって、等価チェックはfalseを返します。
一般的なやり方でこれを行う最良の方法について考えている人はいませんか?どんな種類のトランザクションデータ(ネストされたトランザクションデータでも動作します)に対して実行できるのですか?
私は、オーバーライドされたequalsメソッドを使って自分自身のMockDbId型を作成し、次にこのモックIDを返すテストで(d/tempid ...)を再定義しましたが、所望の挙動。
アドバイスをいただければ幸いです。
ありがとう、
マット。
こんにちはアラン - 返信いただきありがとうございます。私の例では、あなたのソリューションは最初のコードブロックでうまく動作しますが、他の部分に必要な機能は私には与えられません。たとえば、2番目のブロックでは、最初のマップのtemp idが2番目のマップのtemp idと同じであることを確認する必要があるため、値を完全に無視することはできません。ワイルドカードでこれを行うことはできません。 – Sigmoidal
私は、トランザクション後の値をチェックする方法を示すために答えを更新しましたが、私はこれのためのユースケースが何か分かりません。 –