对于我收集的AWS JS Node lambdas,我有以下JEST测试配置.我有一个名为dynamoStore的模块,我在几个不同的lambdas Package.json中引用并在lambdas中使用.我正试图通过模拟调用DynamoDB的发电机存储模块来测试这些lambdas中的一个.问题是jest.fn实现永远不会被调用.我通过在该行中插入断点以及记录调用方法从该行返回的值来确认这一点.

当我在调试器中判断lambda1/index.js时,getVehicleMetaKeysFromDeviceId()是一个JEST对象,但当它被调用时,它不使用我的模拟实现

我如何让这个实现起作用?我的模拟设置错误了吗?

dynamoStore/vehicleMetaConstraints

exports.getVehicleMetaKeysFromDeviceId= async (data) => {
  return data
};

dynamoStore/index.js

exports.vehicleMetaConstraints = require("./vehicleMetaConstraints");
...

lambda1/index.js

const { vehicleMetaStore } = require("dynamo-store");

exports.handler = async (event, context, callback) => {
    const message = event;
  
    let vehicle_ids = await vehicleMetaStore.getVehicleMetaKeysFromDeviceId(message.id);
    // vehicle_ids end up undefined when running the test
}

lambda1/index.test.js

const { vehicleMetaStore } = require("dynamo-store");

jest.mock("dynamo-store", () => {
  return {
    vehicleMetaStore: {
      getVehicleMetaKeysFromDeviceId: jest.fn(),
    },
  };
});

describe("VehicleStorageLambda", () => {
  beforeEach(() => {
    jest.resetModules();
    process.env = { ...env };
  });

  afterEach(() => {
    jest.clearAllMocks();
  });

  test("Handles first time publish with existing device", async () => {
    let functionHandler = require("./index");
    vehicleMetaStore.getVehicleMetaKeysFromDeviceId.mockImplementationOnce(() =>
      // This never gets called
      Promise.resolve({
        device_id: "333936303238510e00210022",
      })
    );

    await functionHandler.handler({});
  });
});

推荐答案

取消对beforeEach中的jest.resetModules()的呼叫.这就是在每次测试之前重新导入模块,并清除您的模拟.

https://stackoverflow.com/a/59792748/3084820

Javascript相关问答推荐

useNavigation更改URL,但不呈现或显示组件

浮动Div的淡出模糊效果

在Vite React库中添加子模块路径

如何将Map字符串,布尔值转换为{key:string;value:bo布尔值;}[]?<>

jQuery s data()[storage object]在vanilla JavaScript中?'

如何在模块层面提供服务?

如何控制Reaction路由加载器中的错误状态?

将内容大小设置为剩余可用空间,但如果需要,可在div上显示滚动条

如何在使用rhandsontable生成表时扩展数字输入验证?

在VS代码上一次设置多个变量格式

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等

try 将Redux工具包与MUI ToggleButtonGroup组件一起使用时出错

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

如何根据输入数量正确显示alert ?

如何在TransformControls模式下只保留箭头进行翻译?

如何处理不带参数的redux thunk payloadCreator回调函数?

如何按区域进行过滤并将其从结果数组中删除?

在Java脚本/类型脚本中覆盖父构造函数中的默认值

查找函数句柄的模块/文件

更改彼此独立的两个输入字段的类型