当我模拟 AWS SDK v3 时,测试用例超时,否则它可以正常工作。它适用于
GetParameterCommand
,但不适用于 GetParametersCommand
我的sdk文件如下所示
const { SSMClient, GetParametersCommand } = require('@aws-sdk/client-ssm');
const getSSMParameter = (param)=> new Promise((resolve, reject) => {
const client = new SSMClient();
const command = new GetParametersCommand({
Names: [ param ]
});
client.send(command, (error, resp) => {
if(error) reject(error);
else resolve(resp.Parameters[0].Value);
});
}
module.exports = getSSMParameter;
我的主文件如下所示:
const { getSSMParameter } = require('./sdk');
async function getParams(paramName) {
return getSSMParameter(paramName);
}
async validateValue(data){
const ssmResp = await getParams('MY_SSM');
return ssmResp == data;
}
module.exports = { validateValue };
我的测试文件如下所示:
const { validateValue } = require('./main');
jest.mock('@aws-sdk/client-ssm', () => ({
SSMClient: jest.fn(() => ({
send: () => ({
Parameters: [{
Name: 'MY_SSM',
Value: '12344556',
}],
}),
})),
GetParametersCommand: jest.fn(),
}));
describe('validateValue', () => {
test('value should match', async () => {
expect(await validateValue('12344556')).toBe(true);
});
});
您没有正确模拟
ssmClient.send()
方法。它接受两个参数,第一个是命令,第二个是错误优先回调。
例如
sdk.js
:
const { SSMClient, GetParametersCommand } = require('@aws-sdk/client-ssm');
const getSSMParameter = (param) =>
new Promise((resolve, reject) => {
const client = new SSMClient();
const command = new GetParametersCommand({
Names: [param],
});
client.send(command, (error, resp) => {
if (error) reject(error);
else resolve(resp.Parameters[0].Value);
});
});
module.exports = { getSSMParameter };
main.js
:
const { getSSMParameter } = require('./sdk');
async function getParams(paramName) {
return getSSMParameter(paramName);
}
async function validateValue(data) {
const ssmResp = await getParams('MY_SSM');
console.log("🚀 ~ validateValue ~ ssmResp:", ssmResp)
return ssmResp == data;
}
module.exports = { validateValue };
main.test.js
:
const { validateValue } = require('./main');
jest.mock('@aws-sdk/client-ssm', () => ({
SSMClient: jest.fn(() => ({
send: jest.fn((command, callback) => {
callback(null, {
Parameters: [
{
Name: 'MY_SSM',
Value: '12344556',
},
],
});
}),
})),
GetParametersCommand: jest.fn(),
}));
describe('validateValue', () => {
test('value should match', async () => {
expect(await validateValue('12344556')).toBe(true);
});
});
测试结果:
console.log
🚀 ~ validateValue ~ ssmResp: 12344556
at log (stackoverflow/78315783/main.js:9:11)
PASS stackoverflow/78315783/main.test.js
validateValue
√ value should match (15 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.755 s, estimated 6 s
Ran all test suites related to changed files.
封装版本:
"jest": "^29.7.0",
"@aws-sdk/client-ssm": "^3.554.0",