Chciałem odpalić sobie normalnie testy jednostkowe, ale nie mogłem. Dostawałem bład:
Illuminate\Contracts\Container\BindingResolutionException : Target [Coyote\Repositories\Contracts\PageRepositoryInterface] is not instantiable while building [Coyote\Listeners\PageListener].
C:\Users\User\PhpstormProjects\coyote\vendor\laravel\framework\src\Illuminate\Container\Container.php:1089
C:\Users\User\PhpstormProjects\coyote\vendor\laravel\framework\src\Illuminate\Container\Container.php:882
google milczy.
Zacząłem debugować, i natrafiłem na źródło problemu, a mianowicie parsowanie ścieżek repozytoriów na namespace'y w RepositoryServiceProvider
:
/** @var \SplFileInfo $file */
foreach ($files as $file) {
$path = str_replace(app_path() . '/', '', $file->getPathname());
$this->provides[] = 'Coyote\\' . str_replace('/', '\\', substr($path, 0, -4));
}
Kluczem jest str_replace(app_path() . '/', '', $file->getPathname())
- ta linijka ma zamienić aboslutną ścieżkę $file->getPathname()
na relatywzną względem app_path()
. Na systemach w których '/'
jest separatorem katalogów, to śmiga; ale na systemach z separatorem \
otóż nie śmiga.
Strzelam że tutaj wszyscy maintainerzy coytote'a odpalają testy z dockera, a tam siedzi linuch, więc bug nie był nigdy wykryty.
PR na Githubie: https://github.com/adam-boduch/coyote/pull/645