使用 Hyn/multi-tenant 在 Laravel 项目中设置测试

Setting up testing in Laravel project using Hyn/multi-tenant

我正在使用 Hyn/multi-tenant 5.6 包来支持多租户应用程序。 我的应用程序运行良好,我可以创建租户并且它们 运行 正确。

问题出在测试上。我想设置一个 existing tenant 用于我的测试目的。但不知何故,应用程序无法在测试期间创建正确的路由。 在 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]);

    }

}

我通过谷歌搜索发现了一些类似的问题,但 none 他们的解决方案对我有用: https://github.com/tenancy/multi-tenant/issues/584

我的所有路线都在我的 tenants.php 文件中并且可以使用。 我正在使用最新版本的 PHPUNIT。

我得到的错误是:

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

在写这个问题时,我尝试了更多选项,添加和删除了一些代码(上周我至少做了 10 小时),令我惊讶的是我找到了解决方案。

我只是忘了做:

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

因此,如果您想为测试设置一个现有租户,您需要将以下代码添加到您的 setUp() 方法中。如果您想创建一个新租户,您可以按照 post 问题中的示例进行操作。

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]);

    }

遗憾的是这部分没有记录,所以我希望有类似问题的人能找到这个post。