テクノロジー プログラミング C i

CIでMongooseを使ったExpressアプリのテストが通らないときの対処法

CIでMongooseを使ったExpressアプリのテストが通らないときの対処法

ローカル環境では全部通るのに GitHub Actions で何故かタイムアウトしてしまう Jest テストに困り果ててたら、よく見るとエラーメッセージが出てる!!!! MongooseServerSelectionError: Error: connect ECONNREFUSED 127.0.0.1:27017 ありがとう、console.log()。あまりに上にいたから全然見てなくて一時間ぐらい無駄にしたけどこれのおかげで助かった。

公式を読めばわかる。

最終的にわたしのワークフローファイルはこんな感じになったということだけを晒す。 環境変数で苦労した記事のときと比べて Start MongoDBのステップが増えたり他のステップにも名前つけたからだいぶ可読性が上がったと思う。

name: Run unit tests

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14.x]
        mongodb-version: ["4.2"]

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
          cache: "npm"

      - name: Start MongoDB
        uses: supercharge/mongodb-github-action@1.6.0
        with:
          mongodb-version: ${{ matrix.mongodb-version }}

      - name: Create .env file
        run: |
          touch .env
          echo NODE_ENV = 'test' >> .env
          echo MONGO_URI = ${{ secrets.MONGO_URI }} >> .env
          echo PORT = ${{ secrets.PORT }} >> .env
          echo BASE_URI = ${{ secrets.BASE_URI }} >> .env
          echo PASSPORT_GITHUB_CALLBACK_URL = ${{ secrets.PASSPORT_GITHUB_CALLBACK_URL }} >> .env
          echo PASSPORT_GITHUB_CLIENT_ID = ${{ secrets.PASSPORT_GITHUB_CLIENT_ID }} >> .env
          echo PASSPORT_GITHUB_CLIENT_SECRET = ${{ secrets.PASSPORT_GITHUB_CLIENT_SECRET }} >> .env
          echo SESSION_SECRET = ${{ secrets.SESSION_SECRET }} >> .env          

      - name: Install dependencies
        run: npm ci

      - name: Build
        run: npm run build --if-present

      - name: Run tests
        run: npm test

結論、mongoDB を使うときは GitHub Actions でもスタートしよう。