LoginSignup
0
0

More than 3 years have passed since last update.

【Docker+Laravel】テスト用のダミーファイルの生成の際に出たエラーたち

Posted at

状況

Dockerの環境でLaravelアプリのテストの際、ダミーの画像ファイルを作ろうと思い、公式リファレンスにもあるfile()を利用しました。

公式リファレンス(ファイルアップロードのテスト)
https://readouble.com/laravel/5.8/ja/http-tests.html?header=%25E3%2583%2595%25E3%2582%25A1%25E3%2582%25A4%25E3%2583%25AB%25E3%2582%25A2%25E3%2583%2583%25E3%2583%2597%25E3%2583%25AD%25E3%2583%25BC%25E3%2583%2589%25E3%2581%25AE%25E3%2583%2586%25E3%2582%25B9%25E3%2583%2588

$file = UploadedFile::fake()->image('avatar.jpg');

テストしてみるとこんなエラーが...

Tests\Feature\InformationControllerTest::testStore
Call to undefined function Illuminate\Http\Testing\imagecreatetruecolor()

最初はクラスをuseしてないのかな?とかLaravelアプリ側の問題だと思いましたが、どうやらこのfile()メソッドが定義されるIlluminate\Http\UploadedFileクラスを使うには、PHP GDというPHPのライブラリが必要なようです。

PHP GDのインストール

DockerfileにPHP GDのインストールを追加してみます。

RUN apt-get update && apt-get install -y \
    zlib1g-dev \
    libzip-dev \
    mariadb-client \
  && docker-php-ext-install zip pdo_mysql gd 

上のように書き換え、再構築してみると、次はこんなエラーが

configure: error: png.h not found

調べるとdocker-php-ext-install gdをするだけでは足りず、
libfreetype6-dev
libjpeg62-turbo-dev
libpng-dev
依存関係のある三つのパッケージを事前に apt-get install する必要があるみたいです。

Dockerfileを修正します。
docker-php-ext-install gdの実行前に三つのパッケージのapt-get installを書きます。

RUN apt-get update && apt-get install -y \
    zlib1g-dev \
    libzip-dev \
    mariadb-client \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
  && docker-php-ext-install zip pdo_mysql gd 

再度buildしてみると正常に構築できました。

本当にインストールできているか確認してみます。

gd

GD Support => enabled
GD Version => bundled (2.1.0 compatible)
GIF Read Support => enabled
GIF Create Support => enabled
PNG Support => enabled
libPNG Version => 1.6.36
WBMP Support => enabled
XBM Support => enabled

ちゃんとインストールできたようですね。

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