【发布时间】:2021-07-23 03:10:41
【问题描述】:
我正在尝试模拟 AWS Secrets Manager 的 getSecretValue 方法。
它不起作用 - 它不是调用 sinon 模拟,而是调用真正的 AWS 函数。
示例测试:
'use strict';
const sinon = require( 'sinon' );
const AWS = require( 'aws-sdk' );
const secretsManager = new AWS.SecretsManager();
const unitUnderTest = require( '../modules/myUnitUnderTest' );
const { expect } = require( 'chai' );
describe( 'Failing example for Stack Overflow', async () => {
afterEach( () => {
sinon.restore();
} );
it( 'mocks the call to AWS Secret Manager successfully', async () => {
sinon.stub( secretsManager, 'getSecretValue' ).returns( Promise.resolve( {SecretString: { publicKey: 'secretUsername', privateKey: 'secretPassword' }} ) );
const key = 'key';
const username = null;
const password = null;
await unitUnderTest( key, username, password );
expect( username ).to.equal( 'secretUsername' );
expect( password ).to.equal( 'secretPassword' );
} );
} );
示例函数:
const AWS = require( 'aws-sdk' );
const secretsManager = new AWS.SecretsManager();
module.exports = async ( keyId, username, password ) => {
await getSecret( keyId )
.then( secret => {
username = secret.publicKey;
password = secret.privateKey;
} )
.catch(
err => {
logger.error( err );
}
);
};
const getSecret = (keyId ) => {
return new Promise( ( resolve, reject ) => {
secretsManager.getSecretValue( {
SecretId: keyId
}, ( err, data ) => {
if ( err ) {
reject( err );
} else {
resolve( JSON.parse( data.SecretString ) );
}
} );
} );
};
预期行为:
Sinon 模拟 AWS Secrets Manager
实际行为:
Sinon 不起作用,AWS 被真正调用,我的日志中出现错误,证明真正的 AWS 开发工具包已被调用/已尝试从 AWS Secrets Manager 帐户中读取我在我的默认配置文件中的秘密机器:
Failed to obtain the secret: ConfigError: Missing region in config
我对此束手无策。为什么 sinon 不工作?
【问题讨论】:
标签: node.js chai sinon aws-sdk-js aws-secrets-manager