Come realizzare un’applicazione Laravel Multi-tenant — Part 5 — Automated Tests

Francesco Lettera
3 min readJul 22, 2018

--

Photo by chuttersnap on Unsplash

Parte 0 | Parte 1 | Parte 2 | Parte 3 | Parte 4 | Parte 5 | Parte 6

Questa è la traduzione della serie Full-featured multi-tenant Laravel app from scratch di Ashok Gelal

In questa parte ci occuperemo dei seguenti aspetti:

✅ Refactor del nostro codice per renderlo più leggibile e testabile

✅ Configurare il nostro ambiente di test

✅ Aggiungere test

Prima di inoltrarci nei meandri del test, mettiamoci l’anima in pace e aggiungiamo alcuni test automatici.

Non è mai troppo tardi per aggiungere test o ripulire il tuo codice

Sebbene la nostra applicazione sia piuttosto piccola e non avremo molti test da scrivere, possiamo gettare le fondamenta per impostare un ambiente di test che sia utile in futuro. Questo ci dà l’opportunità di effettuare un refactoring del nostro codice per renderlo più testabile e leggibile. Non è mai troppo tardi per aggiungere test o ripulire il tuo codice.

1. Refactor

La logica per creare e cancellare un tenant è una sorta di procedura sparpagliata in due classi — CreateTenant.php e DeleteTenant.php. Questo rende difficile non solo seguire il codice ma anche creare un test ad hoc. Facciamo un refactoring creando una classe Tenant.php che incapsuli la creazione, il recupero, e la cancellazione di un tenant. Vedrai i vantaggi di creare questa classe quando inizierai ad aggiungere test complessi in seguito.

Crea una classe app/Tenant.php:

Questa classe è nuova ma la logica non lo è — abbiamo semplicemente copiato la logica da CreateTenant.php e DeleteTenant.php. Questo significa, che abbiamo aggiunto il refactoring di entrambe le classi. Prima di tutto, ripuliamo CreateTenant.php:

E ripuliamo DeleteTenant.php

Dovresti essere in grado di creare e cancellare un tenant senza alcun problema. Provaci per essere sicuro.

2. Configuriamo il nostro ambiente di test

Potresti utilizzare il tuo database esistente (townhousedb) per avviare i tuoi test automatici. Ma ti esorto a non farlo. Crea, invece, un database di test per avviare i tuoi test. Questo ti eviterà di ricreare un nuovo tenant ogni volta che partono i test. Credimi, sarà tedioso creare tenant sul tuo db ogni volta che dovrai avviare i test.

Crea un database di test, townhousedb_test, e assicurati di dare al nostro townhouseadmin user i giusti permessi per questo database. Se hai bisogno di un refresh o di creare un database multi-tenant compatibile, vai allo step 2 di questa serie. Crea il database e non preoccuparti di modificare il file .env.

Appena hai creato il database, abbiamo bisogno di modificare il nostro file phpunit.xml per aggiungere due nuove variabili di ambiente:

<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_DATABASE" value="townhousedb_test"/>
<env name="TENANCY_AUTO_HOSTNAME_IDENTIFICATION" value="false"/>

</php>

3. Aggiungi test

Prima di aggiungere i test, creiamo una classe base per i test per i nostri tenant. Creiamo una classe astratta test/TenantAwareTestCase.php:

Dài un’occhiata alla linea #14, abbiamo avviato il comando tenancy:install ogni volta che facciamo il refresh del test. Adesso siamo pronti per aggiungere i nostri test. Prima di tutto, testiamo la creazione del tenant:

I test sono auto-esplicativi. Se ti senti confuso, chiedi pure.

Adesso testiamo la cancellazione del tenant:

Mentre stiamo aggiungendo test, aggiungiamo alcuni unit test alla nostra classe middleware EnforceTenancy.php:

Adesso avvia i test e tutto dovrebbe essere “verde”.

E’ tutto per questo post. Scrivere test per un’app multi-tenant non è difficoltoso, ma non è neanche una passeggiata. E mi ci è voluto molto tempo rispetto al setup iniziare.

Sei già iscritto alla Laravel Letter? No???
https://laravel.happyflow.it/

https://laravel.happyflow.it/

--

--