Codeception / AspectMock

The most powerful and flexible mocking framework for PHPUnit / Codeception.
MIT License
790 stars 129 forks source link

Cannot was not found by locator #175

Open gglazewski opened 4 years ago

gglazewski commented 4 years ago

Using Yii2,

As soon as I extend my controllers with a custom class or implement custom interface I get following errors:

Class app\controllers\BaseController was not found by locator
Class app\models\MyInterface was not found by locator

Unfortunately, to keep my tests working I had to remove my interface. But I cannot remove my BaseController.

My Kernel is defined like so in __bootstrap.php

require __DIR__ .'/../vendor/autoload.php';
$kernel = Kernel::getInstance();
$kernel->init([
    'includePaths' => [
        __DIR__ . '/../service',
        __DIR__ . '/../controllers',
        __DIR__ . '/../model',
        __DIR__ . '/../vendor/yiisoft',
    ],
    'excludePaths' => [
        __DIR__ . '/../tests'
    ],
    'cacheDir'  => '/tmp/aopcache',
]);

$kernel->loadFile(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
$kernel->loadFile(__DIR__ . '/../vendor/yiisoft/yii2/base/ErrorException.php');
$kernel->loadFile(__DIR__ . '/../vendor/yiisoft/yii2/base/UnknownClassException.php');

Is this a known problem or am I doing something obviously wrong?

I created SO question as well: https://stackoverflow.com/questions/59751752/error-class-was-not-found-by-locator-when-running-tests

SamMousa commented 4 years ago

Yii2 does not use a Kernel, so this error is likely not related to Yii

puniserv commented 4 years ago

Replace Yii2 autoloader by composer autoloader.

Naktibalda commented 4 years ago

@SamMousa This Kernel belongs to AspectMock: https://github.com/Codeception/AspectMock/blob/master/src/AspectMock/Kernel.php