Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

bmrbehnam's avatar

Issues Mocking basePath Method in Laravel Tests

I'm trying to mock the basePath method in my Laravel application to test some functionality. My main code uses the base_path helper function like this:

$modules = $this->getModules(base_path('modules'));

In my test, I'm attempting to mock this helper function. Here is the code I've used in my test:

$testModulesPath = '/path/to/test/modules';

$pathMock = $this->partialMock(\Illuminate\Foundation\Application::class, function ($mock) use ($testModulesPath) {
    $mock->shouldReceive('basePath')->andReturn($testModulesPath);
});

dd(
    'test mock',
    app(\Illuminate\Foundation\Application::class)->basePath(),
    app()->basePath()
);

The output from dd is:

"test mock"
"/path/to/test/modules"
"/var/www/html"

It seems like app(\Illuminate\Foundation\Application::class)->basePath() returns the mocked path correctly, but app()->basePath() still returns the original path and base_path helper function use it.

What I've Tried: Partially mocking \Illuminate\Foundation\Application class. Binding the mock instance to the container using $this->app->instance(...). Alias \Illuminate\Foundation\Application::class to 'app'.

The base_path helper function does not seem to use the mocked basePath method.

0 likes
0 replies

Please or to participate in this conversation.