【问题标题】:which data type to use to expect date value in jest在玩笑中使用哪种数据类型来期望日期值
【发布时间】:2022-08-17 16:04:02
【问题描述】:

在我的测试中

    it(\"should list all tickets\", async () => {
    const getTicket = await request(app)
        .get(\"/v1/ticket\")
        .set(\"authorization\", loginResponse.body.accessJWT);
    console.log(getTicket.body.result);
    console.log(getTicket.body.result[0].conversations);
    expect(getTicket.body.result).toEqual(
        expect.arrayContaining([
            expect.objectContaining({
                // _id: expect.any(String),
                // status: \"pending response\",
                openAt: expect.any(Date),
                conversations: expect.arrayContaining([
                    expect.objectContaining({
                        // sender: expect.any(String),
                        msgAt: expect.any(String),
                        // message: expect.any(String),
                    }),
                ]),
            }),
        ])
    );
});

});

我正在检查 openAt 和 msgAt 的值是否是日期值。但日期值以字符串形式保存,类似于

\"msgAt\": \"2021-12-22T08:29:15.038Z\",

如何检查 openAt 的值是否是以字符串格式保存的日期?

  • 是的,谢谢
  • 但我对为什么它无法将其视为不是 Date 数据类型感到更加困惑
  • 你到底什么意思?它的不是Date,它是一个字符串。
  • 那么这取决于你的意思是断言。 expect.any(Date) 可以完美运行如果实际值为 Date.但在这种情况下,它是一个字符串,它显然不会。JSON只能表示基元,加上 vanilla 对象和数组。

标签: javascript datetime testing jestjs


【解决方案1】:

您可能只需执行以下操作:

expect(new Date(msgAt)).toBeInstanceOf(Date);

将返回的值转换为日期并检查它是否是日期。如果该值不能转换为日期,则测试将失败。

【讨论】:

  • "new Date('hello world') instanceof Date" 这个检查不能正常工作,因为它总是返回 true
【解决方案2】:

可以进行如下检查。如果日期无效,getTime 函数返回 NaN

    expect(new Date(result.msgAt).getTime()).not.toBeNaN();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2023-02-08
    • 2019-04-08
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    相关资源
    最近更新 更多