Github Actions执行Amplify项目单元测试时找不到aws-exports模块
解决GitHub Actions中Amplify项目单元测试缺失aws-exports的问题
核心原因
aws-exports.js是Amplify构建阶段动态生成的配置文件,PR测试流程里没走Amplify构建,自然找不到这个文件。下面是几个实用的正式解决方案:
方案1:测试前自动生成模拟配置文件(轻量化首选)
不用依赖AWS权限,直接给测试环境生成一个仅包含必要配置的模拟文件,避免手动维护多环境模板的麻烦。
操作步骤:
- 在项目根目录新建
aws-exports.mock.js,只保留测试需要的基础配置:
export default { aws_project_region: 'us-east-1', // 按需添加测试用到的其他配置,比如API端点、Auth基础配置等 };
- 修改你的GitHub Action配置,在测试前复制模板到对应路径:
name: Node CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [16.x] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - run: yarn install # 新增步骤:把模拟文件复制到代码import的路径下 - run: cp aws-exports.mock.js src/aws-exports.js - run: yarn test
注意:根据你项目的实际目录结构调整文件路径,确保和代码中import awsconfig from 'aws-exports'的路径匹配
方案2:用Amplify CLI在CI环境生成真实配置
如果测试需要用到真实的Amplify环境配置,可以通过CLI在CI流程里拉取配置生成文件,但需要配置AWS权限。
操作步骤:
- 在GitHub仓库的Secrets里添加AWS访问密钥(
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY),该账号需要有对应Amplify项目的访问权限。 - 修改GitHub Action配置,安装Amplify CLI并拉取环境配置:
name: Node CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [16.x] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} # 全局安装Amplify CLI - run: npm install -g @aws-amplify/cli # 配置AWS凭证 - run: amplify configure --accessKeyId ${{ secrets.AWS_ACCESS_KEY_ID }} --secretAccessKey ${{ secrets.AWS_SECRET_ACCESS_KEY }} --region us-east-1 # 拉取指定Amplify环境的配置并生成aws-exports - run: amplify pull --appId 你的Amplify项目ID --envName staging --yes - run: yarn install - run: yarn test
注意:替换你的Amplify项目ID和envName为你实际的项目ID和测试环境名称
方案3:在测试框架中mock模块(单元测试推荐)
如果是单元测试,完全可以在测试框架(比如Jest)里直接mockaws-exports模块,不需要生成物理文件,更符合单元测试的隔离原则。
示例(Jest配置):
在项目根目录的jest.config.js中添加:
module.exports = { // 其他已有配置 moduleNameMapper: { 'aws-exports': '<rootDir>/__mocks__/aws-exports.js', }, };
然后在__mocks__/aws-exports.js里编写模拟配置:
export default { // 测试需要的配置项 };
内容的提问来源于stack exchange,提问作者NateG
相关产品推荐
相关产品推荐

