如何让JEST获取AWS临时凭证或执行awsume后运行测试
解决Jest无法获取AWSume加载的凭证问题
下面是几个可行的解决办法:
方法1:修改Jest插件的启动命令
在VS Code的Jest插件设置里,找到jest.jestCommandLine选项,将其值改为:
awsume <你的AWS配置文件名> && jest
这样每次插件运行测试前,会先执行awsume加载凭证,再启动Jest,凭证会直接在同一个进程环境中生效。
方法2:手动传递临时凭证到Jest环境
- 先在终端执行awsume,然后导出临时凭证到环境变量:
awsume <你的AWS配置文件名> export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id) export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key) export AWS_SESSION_TOKEN=$(aws configure get aws_session_token) - 或者用awsume的
-e参数直接生成环境变量脚本并执行:eval $(awsume <你的AWS配置文件名> -e) - 之后在VS Code中重启Jest插件,它会继承当前终端的环境变量(注意要确保VS Code是从这个终端启动的,或者在工作区设置里手动添加这些变量)。
也可以直接在VS Code的.vscode/settings.json里临时添加这些环境变量(凭证过期后需要更新):
{ "jest.env": { "AWS_ACCESS_KEY_ID": "你的临时AccessKey", "AWS_SECRET_ACCESS_KEY": "你的临时SecretKey", "AWS_SESSION_TOKEN": "你的临时SessionToken" } }
方法3:在Jest的前置脚本中加载凭证
创建一个Jest的setup文件(比如jest.setup.js),在里面通过子进程调用awsume并获取凭证,设置到环境变量中:
const { execSync } = require('child_process'); // 执行awsume并获取输出的凭证信息 const credsOutput = execSync('awsume <你的AWS配置文件名> -e', { encoding: 'utf8' }); // 解析输出的环境变量命令,提取凭证 const creds = credsOutput.split('\n').reduce((acc, line) => { if (line.startsWith('export AWS_')) { const [key, value] = line.replace('export ', '').split('='); acc[key] = value.replace(/"/g, ''); } return acc; }, {}); // 设置到process.env中 process.env.AWS_ACCESS_KEY_ID = creds.AWS_ACCESS_KEY_ID; process.env.AWS_SECRET_ACCESS_KEY = creds.AWS_SECRET_ACCESS_KEY; process.env.AWS_SESSION_TOKEN = creds.AWS_SESSION_TOKEN;
然后在jest.config.js中配置这个setup文件:
module.exports = { setupFiles: ['./jest.setup.js'], // 其他配置... };
这样每次Jest启动前,都会自动执行这个脚本加载凭证。
内容的提问来源于stack exchange,提问作者ChKl
相关产品推荐
相关产品推荐

