0

0

在Jest测试中有效管理和传递AWS临时凭证

花韻仙語

花韻仙語

发布时间:2025-09-05 22:36:02

|

757人浏览过

|

来源于php中文网

原创

在jest测试中有效管理和传递aws临时凭证

本文旨在解决Jest测试框架在执行涉及AWS服务的测试时,无法访问通过awsume等工具加载的AWS临时凭证的问题。核心内容将围绕两种主要解决方案展开:通过设置环境变量直接将临时凭证传递给Jest进程,以及通过创建封装脚本来确保awsume加载的凭证在Jest执行环境中可用。这些方法能有效解决Jest与AWS服务集成时的认证挑战,确保测试顺利进行。

当我们在开发环境中,特别是使用awsume这类工具来管理AWS临时凭证时,经常会遇到一个挑战:Jest测试框架在执行与AWS服务(例如DynamoDB)交互的测试时,可能无法自动获取这些在终端会话中加载的凭证。这通常发生在Jest作为VS Code插件运行,或在独立于凭证加载会话的进程中启动时。为了解决这一问题,确保Jest能够正确认证并访问AWS资源,我们提供两种有效策略。

策略一:通过环境变量传递AWS临时凭证

最直接且推荐的方法是,在Jest测试运行之前,将AWS临时凭证作为环境变量注入到Jest进程的环境中。AWS SDK,包括其JavaScript版本,会优先从特定的环境变量中读取凭证信息。这些环境变量包括AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和AWS_SESSION_TOKEN(如果凭证是临时的)。

操作步骤:

  1. 获取临时凭证: 首先,使用awsume(或其他凭证管理工具)在你的终端会话中加载所需的AWS凭证。awsume通常会将这些凭证信息输出到终端,或者设置到当前会话的环境变量中。你需要提取出AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和AWS_SESSION_TOKEN(如果存在)的实际值。

  2. 设置环境变量: 在运行Jest测试的同一个终端会话中,手动设置这些环境变量。请注意,这里的your_access_key_id_here、your_secret_access_key_here和your_session_token_here需要替换为实际的凭证值。

    export AWS_ACCESS_KEY_ID="your_access_key_id_here"
    export AWS_SECRET_ACCESS_KEY="your_secret_access_key_here"
    # 如果是临时凭证,还需要设置会话令牌
    export AWS_SESSION_TOKEN="your_session_token_here"

    重要提示: awsume通常会设置所有必要的环境变量,包括AWS_SESSION_TOKEN。如果你的awsume会话已经激活,理论上你只需要在运行Jest的终端会话中执行awsume,然后直接运行jest命令即可。但如果Jest是在一个独立的、未继承awsume环境变量的进程中启动(例如某些IDE插件),则需要手动传递。

  3. 运行Jest测试: 在设置完环境变量后,直接运行你的Jest测试。

    jest

    Jest及其内部的AWS SDK将能够读取这些环境变量,并使用它们进行认证。

注意事项:

Multiavatar
Multiavatar

Multiavatar是一个免费开源的多元文化头像生成器,可以生成高达120亿个虚拟头像

下载
  • 安全性: 直接在终端中export凭证只适用于开发环境。在CI/CD管道中,应使用更安全的机制(如CI/CD工具的凭证管理功能或IAM角色)来提供凭证。
  • 临时性: awsume提供的凭证是临时的,具有有效期。一旦凭证过期,你需要重新加载并更新环境变量。
  • 会话令牌: 对于临时凭证,AWS_SESSION_TOKEN是至关重要的。如果缺少此令牌,认证将失败。

策略二:使用脚本封装Jest执行

另一种方法是创建一个简单的 shell 脚本,该脚本首先负责加载AWS凭证(例如通过运行awsume命令),然后在同一个脚本的上下文中执行Jest测试。这种方法确保了awsume设置的环境变量能够被后续的jest命令继承。

操作步骤:

  1. 创建执行脚本: 在项目根目录或一个方便的位置创建一个 shell 脚本(例如run-tests.sh)。

    #!/bin/bash
    
    # 确保 awsume 命令可用
    if ! command -v awsume &> /dev/null
    then
        echo "awsume could not be found, please install it or ensure it's in your PATH"
        exit 1
    fi
    
    # 激活 awsume 会话,这将设置必要的 AWS 环境变量
    # 替换 'your-profile-name' 为你的 awsume 配置文件名
    # 或者如果 awsume 已经激活,可以直接跳过这一步
    # eval "$(awsume your-profile-name --output-format bash)"
    # 假设 awsume 已经在外部终端激活,或者你希望在脚本中直接激活
    # 如果 awsume 已经激活,这里可能不需要再次执行,或者需要根据 awsume 的具体用法调整
    
    # 简单地运行 awsume,让它设置环境变量
    # 注意:直接运行 awsume 并不能将变量传递给当前脚本的子进程
    # 更好的做法是使用 eval "$(awsume ...)" 或者确保 awsume 已经在父进程中激活
    
    # 假设 awsume 已经在运行此脚本的终端会话中激活,
    # 或者你有一个机制可以在此处加载凭证。
    # 例如,如果你的 awsume 配置允许直接输出凭证,你可以这样捕获:
    # export AWS_ACCESS_KEY_ID=$(awsume -k)
    # export AWS_SECRET_ACCESS_KEY=$(awsume -s)
    # export AWS_SESSION_TOKEN=$(awsume -t)
    
    # 更通用的方法是,如果 awsume 已经在父shell中激活,那么 Jest 应该能继承
    # 如果需要在脚本内部激活,通常需要 eval
    # 例如:
    # eval "$(awsume your-profile-name)"
    
    # 这里我们假设 awsume 已经在执行此脚本的父进程中激活
    # 或者,如果你的 awsume 配置文件中包含 `export` 语句,
    # 并且你 source 了该文件,那么凭证将可用。
    
    # 运行 Jest 测试
    echo "Running Jest tests with AWS credentials..."
    jest "$@" # "$@" 会将所有传递给脚本的参数传递给 jest
  2. 赋予执行权限:

    chmod +x run-tests.sh
  3. 运行脚本:

    ./run-tests.sh

    或者如果你需要传递参数给 Jest:

    ./run-tests.sh --watch

注意事项:

  • awsume的集成: awsume通常通过eval "$(awsume )"来设置当前 shell 会话的环境变量。在脚本中直接调用awsume而不使用eval可能无法将环境变量传递给脚本本身或其子进程。因此,确保awsume在脚本执行前已经激活,或者脚本能够正确地捕获并设置这些变量。上述脚本示例假设awsume已在父 shell 激活,或者你需要根据awsume的具体用法进行调整。
  • 灵活性: 这种方法允许你在运行 Jest 之前执行任何必要的设置或预处理步骤。

总结

在Jest测试中处理AWS临时凭证的关键在于确保Jest进程能够访问到正确的认证信息。通过环境变量传递凭证是最直接有效的方法,尤其适用于开发环境和手动测试。而使用封装脚本则提供了更大的灵活性,允许在运行测试前执行复杂的初始化逻辑。无论选择哪种方法,都应始终关注凭证的安全性,并避免在生产环境中硬编码或不安全地暴露敏感信息。理解这些机制将帮助你更顺畅地在Jest中集成和测试与AWS服务相关的代码。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

33

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

32

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

36

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

7

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

11

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号