En mi get-sites.spec.js creé un simulacro como este que funciona perfectamente bien:
jest.mock('@aws-sdk/client-secrets-manager', () => { const SecretsManagerClient = jest.fn().mockImplementation(() => { const result = { SecretString: "{\"server\":\"host\",\"database\":\"database\",\"user\":\"userName\",\"password\":\"password\"}" }; return { send: jest.fn().mockResolvedValue(result) }; }); const GetSecretValueCommand = jest.fn().mockImplementation(() => { return {} }); return { SecretsManagerClient, GetSecretValueCommand } }); Intenté crear la siguiente estructura de directorios y moví el código simulado al archivo client-secrets-manager.js .
__tests__/ |- get-sites.spec.js __mocks__/ |- @aws-sdk/ |-- client-secrets-manager.js src/ |- get-sites.js Luego, en mi archivo get-sites.spec.js , cambié el código simulado a jest.mock('@aws-sdk/client-secrets-manager');
Cuando ejecuto la prueba, aparece un error: TypeError: Cannot read properties of undefined (reading 'SecretString') . ¿Hay alguna forma de mover mi simulacro a un archivo separado para que esté disponible para todas mis pruebas unitarias que preservarán la funcionalidad?
Resulta que estaba cerca. Cambié el archivo client-secrets-manager.js en la carpeta de simulacros para que se vea así:
const SecretsManagerClient = jest.fn().mockImplementation(() => { return { send: jest.fn() }; }); const GetSecretValueCommand = jest.fn().mockImplementation(() => { return {} }); module.exports = { SecretsManagerClient, GetSecretValueCommand } Luego, en mi archivo get-sites.spec.js , agregué esta línea a la prueba:
const sendResponse = { SecretString: "{\"server\":\"host\",\"database\":\"database\",\"user\":\"userName\",\"password\":\"password\"}" }; jest.spyOn(SecretsManagerClient.prototype, 'send').mockResolvedValue(sendResponse);Entonces pude afirmar que se llamaba así:
expect(SecretsManagerClient).toHaveBeenCalledTimes(1); expect(SecretsManagerClient.prototype.send.mock.calls.length).toEqual(1);