ごっそログ

勉強したことなどを書いていきます

Nuxt 3+Spring BootでREST API #11 フロントのテストを自動化する

目次

  • フロント用のワークフローを定義する
  • ワークフローを分離する
  • (補足)pathsとpaths-ignoreの挙動について
  • フロント側の試運転
  • API側の試運転

フロント用のワークフローを定義する

.github\workflowsにフロント用のワークフローであるui-test.ymlを作成する。

name: pr_check_ui

on:
  pull_request:
    types: [opened, synchronize]
    paths:
      - "ui/**"

jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
      - name: checkout source
        uses: actions/checkout@v3

      - name: Cache for node_modules
        uses: actions/cache@v2
        with:
          path: "**/node_modules"
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

      - name: install package
        run: cd ui && npm install

      - name: run test
        run: cd ui && npm run test

依存パッケージをインストールして、前回追加したテストコマンドを叩いている。
プロジェクトのルートパスで動作するのでコマンド実行前にフロントのディレクトリに移動する必要がある。
また、onpathsを指定してui以下に変更があった場合だけワークフローが動作するようにしている。

ワークフローを分離する

以前作成したAPI用のワークフロー(api-test.yml)にはpathsの指定がないため、フロントの変更のみを含むプルリクにも反応してしまう。
無駄なので、フロントのみの変更をAPI用のワークフローが無視するように修正していく。

name: pr_check

on:
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - "ui/**"

jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
      - name: checkout source
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: 17
          distribution: "temurin"

      - uses: actions/setup-node@v1
        with:
          node-version: "14"

      - name: Cache for node_modules
        uses: actions/cache@v2
        with:
          path: "**/node_modules"
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

      - name: build java project by gradle
        run: sh ./gradlew clean build

onpaths-ignoreを指定して、ui以下の変更しか含まれないプルリクの場合は無視するように設定した。
フロントとは異なり、paths-ignoreを用いて指定しているところに注意。
今回の構成では、apiは他の外部のプロジェクト(common, repositoryなど)にも依存する場合があり、フロント以外の変更がある場合には基本的に常に動かしておきたいためこのような指定にした。
このあたりはプロジェクトの設計や都合に応じて適宜考慮すること。

(補足)pathsとpaths-ignoreの挙動について

  • paths

    • マッチするファイルの変更が1つでもあれば起動。
  • paths-ignore

    • マッチするファイルの変更しかなければ起動しない。
    • マッチしないファイルの変更が1つでもあれば起動。

フロント側の試運転

フロント側のみに変更を入れて、プルリクを出してみる。

フロントのワークフローのみが動いている。

API側の試運転

API側のみに変更を入れて、プルリクを出してみる。

APIのワークフローのみが動いている。

参考