[Docker+Laravel]テストをしてたらError: Call to undefined function Illuminate\Http\Testing\imagepng()ではまった


1) Tests\Feature\InformationControllerTest::testStore
Error: Call to undefined function Illuminate\Http\Testing\imagepng()

というエラーではまりました。 状況としては、ダミーのイメージを利用したphpunitのテストを実行したタイミングです。
Laravelでは、テスト用に Illuminate\Http\UploadedFileクラスが提供されておりFakeメソッドと組み合わせることで、ファイルやイメージのダミーを簡単に生成することができます。

いろいろ調べてみました。

[参考1]

https://stackoverflow.com/questions/49034755/test-methods-fail-using-storage-illuminate-http-testing-imagepng-in-laravel

[参考2]

http://mikeylicio.us/read/test-driven-development-bitbucket-pipelines-and-laravel-forge

どうやら

Dockerコンテナ内でIlluminate\Http\UploadedFileクラスを利用するには、PHP GD が必要な模様。

GDライブラリ
・ PHPの画像処理に関する拡張モジュール(doc)
・ PHPでJPEG,PNG,GIFなどの画像処理ができます

したがって、Dockerfile

docker-php-ext-install  gd

の一行を追記して、PHP GDをコンテナ内にインストールするようにすれば 無事解決しました。

comments powered by Disqus