LoginSignup
0
0

More than 1 year has passed since last update.

TravisCIでLaravel用パッケージを複数のLaravelバージョンで自動テストする

Last updated at Posted at 2021-08-01

概要

Testing Laravel Package Against Multiple Laravel Versions.

Laravel用のパッケージを開発する際に、Travisを利用して複数のLaravelバージョンでテストを回すための設定ファイル.travis.yml について。

(検索のワードが良くないのか、イマイチ日本語の情報が出てこなかったので残しておく。)

主要な目的

  • Laravel用パッケージに対する自動テストをTravisで回す ※Laravel本体を使ったアプリケーションのテストではなく、パッケージのテストである点に注意
  • php、Laravelの各バージョンを組み合わせてのテストを回す ※本稿ではPHP7.2~7.4、Laravel6~8を対象とする

結論

language: php
matrix:
  include:
    - php: '7.2'
      env: 'ORCHESTRA_VERSION=4.*'
    - php: '7.2'
      env: 'ORCHESTRA_VERSION=5.*'
    - php: '7.3'
      env: 'ORCHESTRA_VERSION=6.*'
    - php: '7.4'
      env: 'ORCHESTRA_VERSION=6.*'

install:
  - 'composer config github-oauth.github.com ${GH_TOKEN};'
  - 'composer remove --dev --no-update orchestra/testbench'
  - 'composer require --dev --prefer-dist --no-interaction orchestra/testbench $ORCHESTRA_VERSION'
  - 'composer install'

script: 'vendor/bin/phpunit'

本論

orchestral/testbench のバージョンについて

Laravel用パッケージのテストについては、https://github.com/orchestral/testbench の利用がスタンダードであるので、これを利用する。まず、Laravel5.5以降のバージョンとorchestral/testbenchバージョンの対応について整理する。

orchestral/testbench Laravel PHP 備考
3.5 5.5 7.0
3.6 5.6 7.1
3.7 5.7 7.1
3.8 5.8 7.1
3.9 6.0 7.2
4.0 6.0 7.2 Laravelが6系からセマンティックバージョンを採用したためと思われる
4.* 6.* 7.2
5.* 7.* 7.2.5 Laravel7系はPHP7.2.5以上
6.* 8.* 7.3
7.* 9.* 8.0 testbench、Laravelともにdev(2021-08-01現在)

Travisのテスト設定は、上記に基づいて考えていけばよい。

複数バージョンテストのためのcomposer.json

Travisのためにcomposer.json を色々といじりまわすのは面倒なので、とりあえずrequire-dev の項目のバージョン指定を曖昧(*)にしておく。

    "require-dev": {
        "phpunit/phpunit": "*",
        "mockery/mockery": "*",
        "vimeo/psalm": "*",
        "infection/infection": "*",
        "maglnet/composer-require-checker": "*",
        "slevomat/coding-standard": "*",
        "squizlabs/php_codesniffer": "*",
        "jakub-onderka/php-parallel-lint": "*",
        "orchestra/testbench": "*",
        "phpmetrics/phpmetrics": "*",
        "pdepend/pdepend": "*"
    },

こんな感じ。これで、基本的にはビルドした環境で使えるものが入るはず。

複数バージョンテストのための.travis.yml

バージョン対応表に基づいて、使用するPHPバージョン、testbenchのバージョンを設定ファイルに書いていく。下記の要領。

matrix:
  include:
    - php: '7.2'
      env: 'ORCHESTRA_VERSION=4.*'
    - php: '7.2'
      env: 'ORCHESTRA_VERSION=5.*'
    - php: '7.3'
      env: 'ORCHESTRA_VERSION=6.*'
    - php: '7.4'
      env: 'ORCHESTRA_VERSION=6.*'

次に、リポジトリに同梱してあるcomposer.jsonの内容をテストのために必要最低限だけ書き換える。

今回は、orchestra/testbench のバージョンだけ明示的にコントロールしたいので

install:
  - 'composer remove --dev --no-update orchestra/testbench'
  - 'composer require --dev --prefer-dist --no-interaction orchestra/testbench $ORCHESTRA_VERSION'
  - 'composer install'

こんな感じ。composer.json に書いてある orchestra/testbench を一旦削除して、明示的にバージョンを指定する。

最後に、composerでinstallした、ビルド環境にあっているphpunitを叩く必要があるので、

script: 'vendor/bin/phpunit'

こう。

所感

.travis.yml については、試行錯誤しながら実施したら結構すんなり行けた。過去に、複数のPHPバージョンでテストを回したことがある人なら、特に困る箇所は無いだろうと思う。

TravisCIの画面から環境変数追加できるの知らなかった・・・

めちゃ便利やん

トラブルシューティング

発生したトラブルとしては主に以下の3点。

  • おそい(PHP7.2以下の環境だとビルドが遅い。)

=>未解決、しょうがない気がする

  • Laravel5系で、テストが失敗する(App::makePartial() が定義されていない、というエラー)

=>一応解決(Laravel5系は対応バージョンから外した)

  • composer require 時にgithubから怒られる(Could not authenticate against github.com )

=>解決(personal token 使いましょう)

参考URL

Laravel Package Development: Testing Against Multiple Laravel Versions
https://medium.com/homesteading-like-an-artisan/laravel-package-development-testing-against-multiple-laravel-versions-3485cb5762e2

Testing Laravel packages for backward compatibility using Travis
https://medium.com/@remi_collin/testing-laravel-packages-for-backward-compatibility-using-travis-cabc3210e120

orchestral / testbench
https://github.com/orchestral/testbench

Github auth token on TravisCI
https://blog.wyrihaximus.net/2015/09/github-auth-token-on-travis/

api-rate-limit-and-oauth-tokens
https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0