我正在尝试测试以下代码片段
import * as AWS from 'aws-sdk';
export const fetchSSMCertKey = async (certKeyArn: string): Promise<string> => {
const secretsmanager: AWS.SecretsManager = new AWS.SecretsManager();
const data = await secretsmanager.getSecretValue({ SecretId: certKeyArn }).promise();
if (!data.SecretString) {
throw new Error();
} else {
return data.SecretString;
}
};使用这个滑稽的测试代码
import * as types from '../../../types';
import type { SecretsManager } from 'aws-sdk';
jest.mock('aws-sdk');
describe('fetchSSMCertKey', () => {
it('returns a value of secret', async () => {
const secretValue = '---cert---key---value---';
const mockSecretsManager = ({} as unknown) as SecretsManager;
const mockPromise = Promise.resolve({ SecretString: secretValue });
const mockPromiseFunc = jest.fn().mockReturnValue(mockPromise);
mockSecretsManager.getSecretValue = jest.fn().mockReturnValue({ promise: mockPromiseFunc });
expect(await types.fetchSSMCertKey('find-me')).toEqual(secretValue);
});
});但是我不断地得到错误,运行代码:
Test suite failed to run
TypeError: AWS.SecretsManager is not a constructor我的模拟准备缺少的是什么。有没有办法以不同的方式插入SecretManager?
发布于 2022-09-28 16:05:56
aws-sdk使用CommonJS模块系统,因此不能使用*导入(即import * as AWS from 'aws-sdk';)。相反,你应该这样做:
import AWS from 'aws-sdk';
const secretsmanager = new AWS.SecretsManager();https://stackoverflow.com/questions/68637988
复制相似问题