使用GitHub Actions运行Jest单元测试时遇ENOENT错误的解决方法
问题解决方法
你的错误核心原因是:GitHub Actions中每个run步骤会启动独立的Shell会话,执行cd frontend仅在当前步骤生效,后续的npm install和npm test仍会回到仓库根目录执行,自然找不到frontend文件夹里的package.json。
以下是两种可行的解决方式:
方式一:合并命令到同一个run步骤
将需要在frontend目录执行的命令合并到同一个run中,确保目录切换后后续命令在目标目录执行:
run-unit-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '14' - run: cd frontend && npm install && npm test
也可以用多行格式提高可读性:
run-unit-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '14' - run: | cd frontend npm install npm test
方式二:指定working-directory参数
通过GitHub Actions的working-directory属性,直接指定步骤的工作目录,无需手动切换:
单个步骤指定
run-unit-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '14' - run: npm install working-directory: frontend - run: npm test working-directory: frontend
整个Job默认指定
如果Job中所有run步骤都需要在frontend目录执行,可设置Job级别的默认工作目录:
run-unit-tests: runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '14' - run: npm install - run: npm test
内容的提问来源于stack exchange,提问作者shiz
相关产品推荐
相关产品推荐

