【问题标题】:How to mock "NOW()" for TypeORM MySQL?如何为 TypeORM MySQL 模拟“NOW()”?
【发布时间】:2021-04-03 17:31:06
【问题描述】:

我使用 Jest 进行测试,TypeORM 作为 ORM,MySQL 是数据库。

我有一个与时间相关的查询,如果 DAY(NOW()) 小于 27,它将返回结果。

.andWhere('DAY(NOW()) <= 27')

我不希望我的测试在 28 日中断,我应该如何在数据库上模拟/替换它?

还有更优雅的方式吗?

【问题讨论】:

    标签: mysql node.js testing jestjs typeorm


    【解决方案1】:

    您可以将日期作为参数注入。假设您的查询在函数doQuery 中被调用。给函数加一个参数dayNum,在函数内部这样使用。

    .andWhere(':day <= 27', { day: dayNum })
    

    从生产代码中调用

    var now = new Date();
    doQuery(now.getDate());
    

    然后在您的测试代码中,使用适合测试用例的任何 dayNum 参数调用它。

    【讨论】:

    • 我也想过。很好的解决方案,我想知道是否有其他方法可以做到这一点。
    • 我不确定,但这种注入模式被广泛使用以适应单元测试。
    猜你喜欢
    • 1970-01-01
    • 2020-07-03
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2021-12-08
    • 2022-01-02
    • 2021-02-13
    相关资源
    最近更新 更多