テストの目的で、私のMongoDbオブジェクトのcreatedAt
フィールドを制御したいと思います。残念ながら、これは標準timestampの実装では不可能であると思います。ここで私はいくつかのオブジェクトを作成するために使用した後、自分の作成したタイムスタンプを設定していたコードの要点だ:createdAtフィールドをmongooseで操作する
const docArray = [];
const times = [15, 32, 1233, 122].map(seconds => moment().add(seconds, 'seconds'));
for (let i = 0; i < times.length; i += 1) {
// Create an object
docArray.push(await createObj(`${i}`));
const doc2update = await MyModel.findById(docArray[i]._id);
// Save the original created date
const org = doc2update.createdAt;
// Do the update
doc2update.createdAt = times[i];
doc2update.save(); // tried doc2update.update() without change
// Retrieve the updated object
docArray[i] = await TaskModel.findById(docArray[i]._id);
// Check if change preserved
console.log(docArray[i].createdAt - org,
'vs expected',
doc2update.createdAt - org);
}
出力は、私がこのようにして作成された操作と推測
0 'vs expected' 14841
0 'vs expected' 31809
0 'vs expected' 1232787
0 'vs expected' 121762
かなりがっかりです通常の使用には推奨されませんが、テスト時には便利です。これを回避する方法はありますか?
あなたは何をしようとしていますか教えてください。 – nadavvadan
@nadavvadan:私は作成されたオブジェクト(実際にサブ文書)の中間の時間を計算したいですが、私はcreatedAtタイムスタンプを制御したいと思います。私はちょうど遅れてオブジェクトを追加することができますが、それは(1)不必要なテスト時間を追加することです(2)私はまだ正確な時間を制御しないと同じ精度が不足している –