Shi*_*MSK 2 node.js jestjs aws-sdk ssm aws-sdk-js
这是我尝试在 Jest 中编写单元测试的方法
async function getParameter(parameter: string,
withDecryption: boolean = false): Promise<String> {
const params = {
Name: parameter,
WithDecryption: withDecryption,
};
try {
const request = await ssmClient.getParameter(params).promise();
return request.Parameter.Value;
} catch (err) {
logger.error(`Error ${err}`);
throw Error(err);
}
}
Run Code Online (Sandbox Code Playgroud)
测试方法 :
test('getParameterFromSystemManager', async () => {
const mockedResponseData = {
Parameter: {
Value: 'parameterValue',
},
};
ssmClient.getParameter(params).promise = jest.fn();
ssmClient.getParameter(params).promise.mockImplementation(() => Promise.resolve(mockedResponseData));
const data =
await SSMParameters.getParameterFromSystemManager('testurl', false,
'Test', 'elastic');
expect(data).toEqual(mockedResponseData.Parameter.Value);
expect(ssmClient.getParameter).toHaveBeenCalledTimes(1);
});
Run Code Online (Sandbox Code Playgroud)
我收到错误:
类型错误:ssmClient.getParameter(...).promise.mockImplementation 不是函数
我们如何在 Jest 中模拟此类 .promise() 函数?
小智 6
.promise.mockImplementation不是函数的原因是调用getParameter(...)返回一个带有 new 的新实例/对象.promise()。
因此,在第一行中:ssmClient.getParameter(params).promise = jest.fn();您只使用 来设置该实例jest.fn()。
在第二行中,您实际上正在调用.mockImplementation()一个全新的实例。
相反,您将不得不进行模拟getParameter()以确保它每次都返回您的模拟。
ssmClient.getParameter = jest.fn();
ssmClient.getParameter.mockImplementation(() => ({
promise: jest.fn().mockImplementation(() => Promise.resolve(mockedResponseData));
}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10654 次 |
| 最近记录: |