这是我尝试在 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);
}
}
测试方法 :
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);
});
我收到错误:
类型错误:
ssmClient.getParameter(...).promise.mockImplementation 不是函数
我们如何在 Jest 中模拟此类 .promise() 函数?
之所以.promise.mockImplementation
不是一个函数,是调用getParameter(...)
返回一个新的实例/对象.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));
}))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)