Настройка тестирования в проекте Laravel с использованием Hyn / multi-tenant - PullRequest
0 голосов
/ 01 августа 2020

Я использую пакет Hyn/multi-tenant 5.6 для поддержки мультитенантных приложений. Мое приложение работает нормально, я могу создавать клиентов, и они работают должным образом.

Проблема связана с тестированием. Я хочу настроить существующего клиента для целей тестирования. Но почему-то приложение не может создавать правильные маршруты во время тестирования. В CreateApplication. php Я настраиваю арендатор, используемый для тестирования. Который имеет website_id = 1

trait CreatesApplication
{
    /**
     * Creates the application.
     *
     * @return \Illuminate\Foundation\Application
     */
    public function createApplication()
    {
        $app = require __DIR__.'/../bootstrap/app.php';

        $app->make(Kernel::class)->bootstrap();

        return $app;
    }

    public function setUp() : void{

        parent::setUp();

        $hostname = Hostname::find(1);
        $website = Website::findOrFail($hostname->website_id);
        $tenancy = app(Environment::class);
        $tenancy->hostname($hostname);

        Artisan::call('optimize:clear');
        Artisan::call('tenancy:migrate:fresh', ['--website_id' => 1]);
        Artisan::call('tenancy:db:seed',['--class' => 'TenantSeeder','--website_id' => 1]);

    }

}

. Я обнаружил похожие проблемы в Google, но ни одно из их решений не помогло мне: https://github.com/tenancy/multi-tenant/issues/584

Все мои маршруты находятся в мой tenants.php файл и работает. Я использую последнюю версию PHPUNIT.

Я получаю следующую ошибку:

Symfony\Component\Routing\Exception\RouteNotFoundException : Route [new_anmeldung_single] not defined.

1 Ответ

0 голосов
/ 01 августа 2020

Когда я писал этот вопрос, я попробовал еще несколько вариантов, добавил и удалил некоторый код (я сделал по крайней мере 10 часов на прошлой неделе), и, к своему удивлению, я нашел решение.

Я просто забыл сделать:

$tenancy->tenant($website); // switches the tenant and reconfigures the app (new RouteProvider(app()))->boot();//reloads the routes

Итак, если вы хотите настроить существующий клиент для тестирования, вам нужно будет добавить следующий фрагмент кода в свой метод setUp () . Если вы хотите создать нового клиента, вы можете следовать примеру из проблемы, указанной в вопросе.

public function setUp() : void{

        parent::setUp();


        $hostname = Hostname::find(1);
        $website = Website::findOrFail($hostname->website_id);
        $tenancy = app(Environment::class);
        $tenancy->hostname($hostname);
        $tenancy->tenant($website); // switches the tenant and reconfigures the app

        (new RouteProvider(app()))->boot();

        Artisan::call('tenancy:migrate:fresh', ['--website_id' => 1]);
        Artisan::call('tenancy:db:seed',['--class' => 'TenantSeeder','--website_id' => 1]);

    }

К сожалению, эта часть не задокументирована, поэтому я надеюсь, что кто-то с подобными проблемами найдет этот пост.

...