Newbie to AWS ! I have written a function which creates a secretID in AWS secret manager and stores some token value into it. This is the snip of my function create-secret.ts
import * as AWS from 'aws-sdk';
const secretsManager = new AWS.SecretsManager({
region: process.env.AWS_REGION,
});
// Creates a new secret in the AWS secret manager and stores token value
export const createSecretToken = async (secretId: string,token: string,): Promise<any> ={
const params = {
Description: 'Store token',
Name: secretId,
SecretString: token,
};
try{
const data = await secretsManager.createSecret(params).promise();
return data;
} catch(error){
return error
}
};
I am calling this above function from another file called 'main.ts'. This is how main.ts function looks
import {createSecretToken} from './create-secret'
export const handler = async (): Promise<any> => {
const response = await createSecretToken('testSecret', 'testToken');
return {
body: JSON.stringify(response),
};
};
All the logic works perfect.. However my unit tests do not cover the lines implemented in the catch block in create-secret.ts
file.
This is my test file creat-secret.spec.ts
import * as AWS from 'aws-sdk';
import { createSecretToken } from './create-secret';
const response = {
ARN: 'test',
Name: 'testName',
VersionId: 'XXX',
VersionStages: ['AWSCURRENT'],
};
jest.mock('aws-sdk', () => { <-- I am struggling to modify this mock to cover the
catch block.
return {
config: {
update() {
return {};
},
},
SecretsManager: jest.fn(() => {
return {
createSecret: jest.fn(() => {
return {
promise: () => response,
};
}),
};
}),
};
});
describe('storeSecrets', () => {
it('should create a new secret id in secret manager and store admin token ', async () => {
const spy = jest.spyOn(AWS, 'SecretsManager');
const res = await createSecretToken('test', 'test');
expect(spy).toHaveBeenCalledTimes(1);
expect(res).toEqual(response);
});
});
The above test passes and covers this try block from create-secret.ts file
try{
const data = await secretsManager.createSecret(params).promise();
return data;
}
How can i mock secretsManager.createSecret function to mock an error? Please help me write an extra test case to cover this catch block from create-secret.ts
catch(error){
return error
}
Thank you