Tengo la siguiente configuración de prueba de broma para mi colección de AWS JS Node Lambdas. Tengo un módulo llamado dynamoStore
que hago referencia en varios paquetes lambdas diferentes.json y lo uso dentro de los lambdas. Estoy tratando de probar uno de estos lambdas burlándome del módulo de almacenamiento de dynamo mientras realiza llamadas a dynamoDb. El problema es que nunca se llama a la implementación de jest.fn
Lo confirmé colocando un punto de interrupción en esa línea y registrando el valor que devuelven los métodos de llamada.
Cuando lambda1/index.js
en el depurador getVehicleMetaKeysFromDeviceId()
es un objeto de broma, pero cuando se llama, no usa mi implementación simulada
¿Cómo puedo hacer que esta implementación funcione? ¿He configurado mi simulacro incorrectamente?
dynamoStore/vehículoMetaRestricciones
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.prueba.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({}); }); });
Elimina la llamada a jest.resetModules()
en beforeEach
. Eso es volver a importar sus módulos antes de cada prueba y eliminar sus simulacros.