Github Actions Jest

分享于2022年10月08日 express github-actions jestjs mongodb node.js 问答
【问题标题】:Github Actions JestGithub Actions Jest
【发布时间】:2022-10-05 07:38:35
【问题描述】:

我的 Jest 测试通过了,但 Github 操作工作流没有完成。

这是我的 main.yaml。

name: Jest Unit Tests
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14.x, 16.x]
        mongodb-version: [\'4.2\', \'4.4\', \'5.0\']
    steps:
      - uses: actions/checkout@v3
      - name: Setup Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}
      - name: Start MongoDB
        uses: supercharge/mongodb-github-action@1.7.0
        with:
          mongodb-version: ${{ matrix.mongodb-version }}
      - run: npm ci
      - run: npm run workflow
    env: 
      CI: true

我需要修复我的 yaml 文件吗?

  • 这通常意味着进程未退出或某些后台进程未退出。因此,当它运行所有测试并输出结果时,底层节点进程没有退出。有时您在交互式 shell 中不会注意到。不看测试本身就很难判断。
  • 你可以在这里查看测试: github.com/DAT-Cash/datweave/tree/main/tests

【解决方案1】:

事实证明,Github 问题与异步进程有关。即使测试通过了,Jest 仍然会发生异步操作,因此 Github 操作默认为未完成。

通过添加 --forceExit 来强制测试结束并添加 --detectOpenHandles 以查看仍在发生的异步操作来解决此问题。

将这些添加到我的 package.json 脚本中。

"scripts": {
    "local-test": "jest --watchAll",
    "workflow": "jest --forceExit --detectOpenHandles",
    "start": "node server.js",
    "dev": "nodemon server.js"
  },

对于那些刚接触 Github 操作的人,我原帖中的 yaml 文件最后调用了 npm run workflow ,也就是我的 package.json 中的脚本。

有关 Jest 选项的更多信息,请参阅 https://jestjs.io/docs/cli

【讨论】:

  • 是的,这正是我所指的问题类型。请注意,当您说 Github 操作默认为未完成时,它实际上是节点。在 github 操作中,我们只需运行您指定的命令行并等待它以返回码退出。