我正在为一个延长到期日期的函数编写测试。正如您在下面看到的,我创建或更新数据库文档的那一刻与我对日期做出断言的那一刻之间存在细微的差异:
it('should extendExpirationDate', async () => {
const document = documentBuilder.build();
await testDatabase.fillCollections({ documents: [document] });
let documents = await DocumentModel.find({});
expect(documents[0].validUntil).toBe(moment().add(90, 'days').toDate());
const documentDto: UpdateDocumentDto = {
...document,
validUntil: moment().add(100, 'days').toDate(),
};
await documentService.extendExpirationDate(documentDto);
documents = await DocumentModel.find({});
expect(documents[0].validUntil).toBe(moment().add(100, 'days').toDate());
});
是否有可以在误差范围内比较日期的函数?
我怎样才能使这些测试不失败?
我尝试了什么以及我期待什么?
我正在比较相隔毫秒的日期,并且测试失败。
我希望如果日期相差毫秒而不是天数,测试就会通过。我还想避免一个日期为
2024-06-13T23:59:59.995Z
而另一个日期为 2024-06-14T00:00:00.002Z
的极端情况。
您当前正在比较生成的值,这些值取决于您的系统时钟以及运行时执行、网络等的延迟 - 这不会产生确定性结果。相反,存储创建文档的初始日期并将其与发现文档的日期进行比较。然后在更新文档日期时进行相同类型的比较:
it("should extendExpirationDate", async () => {
const document = documentBuilder.build();
let { validUntil } = document;
await testDatabase.fillCollections({ documents: [document] });
let documents = await DocumentModel.find({});
expect(documents[0]?.validUntil).toEqual(validUntil);
const DAY = 1000 * 60 * 60 * 24;
validUntil = new Date(Date.now() + 100 * DAY);
const documentDto: UpdateDocumentDto = { ...document, validUntil };
await documentService.extendExpirationDate(documentDto);
documents = await DocumentModel.find({});
expect(documents[0]?.validUntil).toEqual(validUntil);
});