HCK's avatar
Level 9

Test methods fail using Storage: Illuminate\Http\Testing\imagepng() in Laravel

Hello, I'm doing TDD to test my development, my tests were passing until I decided to reinstall php to repair the sqlite driver for testing (the main driver is mysql). So when I run my hole suite of tests this error shows in every method that uses the storage:

    Error : Call to undefined function Illuminate\Http\Testing\imagepng()
     {laravel}/framework/src/Illuminate/Http/Testing/FileFactory.php:46
     {laravel}/framework/src/Illuminate/Support/helpers.php:1038
     {laravel}/framework/src/Illuminate/Http/Testing/FileFactory.php:49
     {laravel}/framework/src/Illuminate/Http/Testing/FileFactory.php:31
     {laravel}/tests/Feature/FacilityTest.php:38

This one is a method that throws the above error (the line 38 is signaled):

    /**
     * @test
     * Test for: a Facility can be registered by an admin.
     */
    public function a_facility_can_be_registered_by_an_admin()
    {
        /** Given a correct information for a facility */
        \Storage::fake('public');

       // Next line is 38 the problematic one:
        $data = ["name" => "Facility A", 'image' => UploadedFile::fake()->image('facility-a.jpg')];
    
        /** When the request is made by an admin */
        $admin = $this->createUser([], 'admin');
        $response = $this->apiAs($admin, 'POST', '/api/v1/manage/facilities', $data);
    
        /** Then the facility should be registered */
        $response->assertStatus(Response::HTTP_CREATED);
    }

I really don't know why.

If this helps, this is my phpunit file:

phpunit.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <phpunit backupGlobals="false"
             backupStaticAttributes="false"
             bootstrap="vendor/autoload.php"
             colors="true"
             convertErrorsToExceptions="true"
             convertNoticesToExceptions="true"
             convertWarningsToExceptions="true"
             processIsolation="false"
             stopOnFailure="false">
        <testsuites>
            <testsuite name="Feature">
                <directory suffix="Test.php">./tests/Feature</directory>
            </testsuite>
    
            <testsuite name="Unit">
                <directory suffix="Test.php">./tests/Unit</directory>
            </testsuite>
        </testsuites>
        <filter>
            <whitelist processUncoveredFilesFromWhitelist="true">
                <directory suffix=".php">./app</directory>
            </whitelist>
        </filter>
        <php>
            <env name="APP_ENV" value="testing"/>
            <env name="CACHE_DRIVER" value="array"/>
            <env name="SESSION_DRIVER" value="array"/>
            <env name="QUEUE_DRIVER" value="sync"/>
            <env name="DB_CONNECTION" value="sqlite"/>
        </php>
    </phpunit>

Thanks in advance.

0 likes
1 reply
Osama_Khalid's avatar
Level 2

imagepng() is a method of gd library. I think you need to install that.

You can verify that GD support loaded by:

php -i | grep -i gd

The output should be somewhat similar to this:

GD Support => enabled
GD headers Version => 2.1.1-dev
gd.jpeg_ignore_warning => 0 => 0

if you are on Linux try this to install:

sudo apt-get install php5-gd
1 like

Please or to participate in this conversation.