mirror of
https://github.com/stancl/tenancy-docs.git
synced 2025-12-12 10:14:03 +00:00
improve hook & testing docs (fix #38)
This commit is contained in:
parent
90545f715e
commit
34a6b2cadd
2 changed files with 162 additions and 33 deletions
|
|
@ -7,9 +7,11 @@ section: content
|
|||
|
||||
# Application Testing {#application-testing}
|
||||
|
||||
> Note: You cannot use `:memory:` SQLite databases or the `RefreshDatabase` trait due to the switching of default database.
|
||||
> Note: At the moment it's not possible to use `:memory:` SQLite databases or the `RefreshDatabase` trait due to the switching of default database. This will hopefully change in the future.
|
||||
|
||||
To test your application with this package installed, you can create tenants in the `setUp()` method of your test case:
|
||||
### Initializing tenancy
|
||||
|
||||
You can create tenants in the `setUp()` method of your test case:
|
||||
|
||||
```php
|
||||
protected function setUp(): void
|
||||
|
|
@ -21,7 +23,46 @@ protected function setUp(): void
|
|||
}
|
||||
```
|
||||
|
||||
And to delete tenants & their databases after tests:
|
||||
If you don't want to initialize tenancy before each test, you may want to do something like this:
|
||||
```php
|
||||
class TestCase // extends ...
|
||||
{
|
||||
protected $tenancy = false;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
if ($this->tenancy) {
|
||||
$this->initializeTenancy();
|
||||
}
|
||||
}
|
||||
|
||||
public function initializeTenancy($domain = 'test.localhost')
|
||||
{
|
||||
tenancy()->create($domain);
|
||||
tenancy()->init($domain);
|
||||
}
|
||||
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
And in your individual test classes:
|
||||
```php
|
||||
class FooTest
|
||||
{
|
||||
protected $tenancy = true;
|
||||
|
||||
/** @test */
|
||||
public function some_test()
|
||||
{
|
||||
$this->assertTrue(...);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Cleanup
|
||||
|
||||
To delete tenants & their databases after tests, you may use this:
|
||||
```php
|
||||
public function tearDown(): void
|
||||
{
|
||||
|
|
@ -35,7 +76,9 @@ public function tearDown(): void
|
|||
}
|
||||
```
|
||||
|
||||
If you're using the database storage driver, you will also need to run the migrations:
|
||||
### Storage setup
|
||||
|
||||
If you're using the database storage driver, you will need to run the migrations in `setUp()`:
|
||||
```php
|
||||
protected function setUp(): void
|
||||
{
|
||||
|
|
@ -43,8 +86,7 @@ protected function setUp(): void
|
|||
|
||||
$this->artisan('migrate:fresh');
|
||||
|
||||
tenancy()->create('test.localhost');
|
||||
tenancy()->init('test.localhost');
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
|
|
@ -58,7 +100,59 @@ protected function setUp(): void
|
|||
// make sure you're using a different connection for testing to avoid losing data
|
||||
Redis::connection('tenancyTesting')->flushdb();
|
||||
|
||||
tenant()->create('test.localhost');
|
||||
tenancy()->init('test.localhost');
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
### Sample TestCase
|
||||
|
||||
Put together, here's a ready-to-use base TestCase for the DB storage driver
|
||||
```php
|
||||
<?php
|
||||
|
||||
namespace Tests;
|
||||
|
||||
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
||||
|
||||
abstract class TestCase extends BaseTestCase
|
||||
{
|
||||
use CreatesApplication;
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->artisan('migrate:fresh');
|
||||
|
||||
config([
|
||||
'tenancy.queue_database_creation' => false,
|
||||
]);
|
||||
|
||||
config(['tenancy.exempt_domains' => [
|
||||
'127.0.0.1',
|
||||
'localhost',
|
||||
]]);
|
||||
}
|
||||
|
||||
public function tearDown(): void
|
||||
{
|
||||
config([
|
||||
'tenancy.queue_database_deletion' => false,
|
||||
'tenancy.delete_database_after_tenant_deletion' => true,
|
||||
]);
|
||||
tenancy()->all()->each->delete();
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
phpunit.xml:
|
||||
```xml
|
||||
<server name="DB_DRIVER" value="sqlite"/>
|
||||
<server name="DB_DATABASE" value="database/testing.sqlite"/>
|
||||
```
|
||||
|
||||
> Don't forget to create an empty database/testing.sqlite
|
||||
|
||||
You may also wish toa dd `testing.sqlite` to `database/.gitignore`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue