You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dynamoose中Mock指定updatedAt值的Item满足E2E测试?

解决Dynamoose覆盖自定义Mock updatedAt字段的问题

Dynamoose默认的timestamps配置会自动更新createdAt和updatedAt字段,这就是你的Mock数据被覆盖的原因。下面是几种可行的解决方式:

  • 临时禁用模型的自动时间戳
    在保存Mock数据时,通过配置选项关闭自动时间戳功能,这样自定义的updatedAt值就会被保留:

    // 假设你的模型为ItemModel,mockItem是你创建的带自定义updatedAt的对象
    await ItemModel.save(mockItem, { timestamps: false });
    

    或者如果是通过模型实例保存,也可以临时修改实例的模型配置:

    const mockItem = new ItemModel({
      id: "test-item-id",
      updatedAt: new Date(Date.now() - 6 * 60 * 60 * 1000) // 提前6小时的时间
    });
    // 临时关闭自动时间戳
    mockItem.$__.model.config.timestamps = false;
    await mockItem.save();
    
  • 直接使用DynamoDB客户端写入Mock数据
    绕过Dynamoose模型的自动处理逻辑,直接调用底层DynamoDB客户端的写入接口,这样字段值完全由你控制:

    const dynamoClient = ItemModel.dynamoose.client;
    await dynamoClient.putItem({
      TableName: "your-items-table-name",
      Item: {
        id: { S: "test-item-id" },
        updatedAt: { S: new Date(Date.now() - 6 * 60 * 60 * 1000).toISOString() },
        // 其他字段按照DynamoDB的AttributeValue格式定义
      }
    }).promise();
    
  • 自定义时间戳逻辑并在测试中Mock
    如果项目里是自己实现的时间戳生成逻辑(而非依赖Dynamoose自带功能),可以在测试环境中替换时间生成函数,直接返回需要的Mock时间。比如用Jest的Mock功能:

    // 假设时间戳生成函数在timeUtils.js中
    jest.mock('./timeUtils', () => ({
      generateUpdatedAt: () => new Date(Date.now() - 6 * 60 * 60 * 1000)
    }));
    

内容的提问来源于stack exchange,提问作者chaimite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:52:36