使用 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。
我正在使用 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。