Latest

Tuesday, July 11, 2017

Change storage path in Lumen when running tests with Codeception

Asked by: hongaar


In Lumen 5.4, I want to override the default storage path, and since the use of useStoragePath() as possible with Laravel seems unavailable in Lumen, I went for another solution by defining the storage_path() function before it gets defined by the framework.

This requires a modification to the bootstrap/app.php file, which works perfectly fine in normal operation:

// App helpers
require_once __DIR__ . '/../app/helpers.php';

// Composer autoloader
require_once __DIR__ . '/../vendor/autoload.php';

However, when running tests using Codeception, it loads the vendor/autoload.php before bootstrap/app.php gets loaded, which results in this obvious fatal error:

PHP Fatal error: Cannot redeclare storage_path() (previously declared in vendor\laravel\lumen-framework\src\helpers.php:308) in app\helpers.php

I tried extending the shipped Lumen module in Codeception, overwriting the registerAutoloaders() method, without luck (which makes sense, as Codeception also needs to include the Composer autoloader):

class App extends \Codeception\Module\Lumen
{
    protected function registerAutoloaders()
    {
        // Don't include autoload file here, as it will be required in the apps bootstrap file
    }
}

The default storage_path() in Lumen has no entry points for extensions afaik:

public function storagePath($path = '')
{
    return $this->basePath().'/storage'.($path ? '/'.$path : $path);
}

How can I change the default storage path in Lumen which also plays nice when running tests in Codeception?



Source

No comments:

Post a Comment

Adbox