Como gerar e usar registros falsos com fábricas de modelos Laravel
Publicados: 2023-04-28O teste é essencial para o desenvolvimento web. As fábricas de modelos do Laravel definem os registros do banco de dados de maneira previsível e facilmente replicável, para que os testes do seu aplicativo sejam consistentes e controlados. As fábricas de modelos definem um conjunto de atributos padrão para cada um de seus modelos Eloquent.
Por exemplo, se você estiver criando um aplicativo de blog que permite que autores e moderadores aprovem comentários antes de serem publicados, você precisará testar se a função funciona corretamente antes de implantá-la para seus usuários. Tudo isso requer dados de teste.
Para testar o aplicativo de blog descrito acima, você precisa de dados de comentários para imitar e testar a funcionalidade do seu aplicativo. O Laravel permite que você faça isso sem obter comentários de usuários reais, usando as fábricas do Laravel e o Faker para gerar dados falsos.
Este artigo explica como obter dados de comentários sem comentários de usuários reais.
Pré-requisitos
Para concluir este tutorial, você deve estar familiarizado com o seguinte:
- XAMPPGenericName
- Compositor
O XAMPP é uma distribuição Apache gratuita e fácil de instalar que contém PHP, Perl e MariaDB — um banco de dados MySQL. Este tutorial usa a versão mais recente, 8.1.10, que instala o PHP 8.1.10. Leia este artigo se estiver instalando o XAMPP para MacOS ou este guia para Linux. Este tutorial usa o XAMPP no Windows.
O Composer é uma ferramenta que permite definir, instalar e baixar os pacotes dos quais seu aplicativo da web depende no desenvolvimento e na produção. Este tutorial usa a versão v2.4.4 do Composer, que requer o PHP versão 7.2+. Você usa o Composer para instalar o instalador do Laravel para este tutorial.
Você também pode baixar o código completo do projeto para acompanhar.
Como configurar o projeto
Nesta seção, você criará um projeto Laravel e o conectará a um banco de dados. Vamos dar uma olhada em tudo o que isso implica e como realizá-lo.
Instalar o instalador do Laravel
Para criar um projeto Laravel rapidamente, instale o instalador do Laravel:
composer global require laravel/installer
Este código instala o instalador do Laravel globalmente em sua máquina.
Criar um Projeto Laravel
Em seguida, crie um projeto Laravel executando o seguinte:
laravel new app-name
Este código inicializa um novo projeto Laravel e instala todas as dependências:
Outra maneira mais fácil de instalar o Laravel é usar o Composer diretamente.
composer create-project laravel/laravel app-name
Você não precisa instalar o instalador do Laravel ao usar o método acima.
Inicie o aplicativo
Agora você pode alterar o diretório para app-name e iniciar o projeto usando a própria ferramenta de interface de linha de comando (CLI) do Laravel, Artisan:
php artisan serve
Esse código inicia o projeto e o conecta a localhost:8000 ou a qualquer outra porta disponível se a porta 8000 estiver em uso. Em localhost:8000, você deve ver algo assim:
Criar um banco de dados
Para conectar seu aplicativo a um banco de dados, você deve criar um novo banco de dados usando a interface gráfica do usuário PHPMyAdmin do XAMPP. Vá para localhost/phpmyadmin e clique em Novo na barra lateral:
A imagem acima mostra o formulário Create Database com app_name como o nome do banco de dados.
Clique em Criar para criar um banco de dados.
Edite o arquivo .env
Para conectar seu aplicativo a um banco de dados, você deve editar a parte DB do arquivo .env :
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=app_name DB_USERNAME=root DB_PASSWORD=
Esse código preenche as credenciais do banco de dados com o nome do banco de dados, nome de usuário, porta, senha e host. Agora você está pronto para começar a criar fábricas e modelos.
Observação: substitua os valores pelas credenciais do banco de dados. Além disso, se você encontrar o erro "Acesso negado para usuário", coloque os valores para DB_USERNAME
e DB_PASSWORD
entre aspas duplas.
Como gerar dados falsos
Depois de criar o aplicativo e conectá-lo ao banco de dados, você já pode criar os arquivos necessários para gerar dados falsos no banco de dados.
Criar o modelo de comentário
Crie o arquivo de modelo para interagir com as tabelas do banco de dados. Para criar um modelo, use Artisan:
php artisan make:model Comment
Este código cria um arquivo Comment.php dentro da pasta app/M odels com algum código clichê. Adicione o seguinte código abaixo de use HasFactory;
linha:
protected $fillable = [ 'name', 'email', 'body', 'approved', 'likes' ];
Este código lista os campos que você deseja permitir atribuições em massa porque o Laravel protege seu banco de dados de atribuições em massa por padrão. O arquivo de modelo de comentário agora deve ter esta aparência:
Crie o arquivo de migração
Após criar o arquivo model e declarar o array $fillable
, você deve criar o arquivo migration utilizando o comando abaixo:
php artisan make:migration create_comments_table
Nota: A convenção de nomenclatura para criar migrações no Laravel geralmente é snake_case
, também conhecido como underscore_case
. A primeira palavra é a ação, a segunda palavra é o plural do modelo e a última palavra é o recurso que é criado dentro do projeto. Isso significa que você escreverá create_books_table
ao criar uma migração para um modelo Book.
Este código cria um arquivo chamado yyyy_mm_dd_hhmmss_create_comments_table dentro da pasta database/migrations .
Em seguida, edite a função up dentro de yyyy_mm_dd_hhmmss_create_comments_table :
public function up() { Schema::create('comments', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->longText('body'); $table->boolean('approved'); $table->integer('likes')->default(0); $table->timestamps(); }); }
Esse código cria um esquema que cria uma tabela com as colunas: id
, name
, email
, body
, approved
, likes
e timestamps
.
Execute as migrações
Criar e editar o arquivo de migrações não fará nada até que você os execute usando a linha de comando. Se você olhar para o gerenciador de banco de dados, ainda está vazio.
Execute as migrações usando o Artisan:
php artisan migrate
Este comando executa todas as migrações dentro do banco de dados/migrações porque é a primeira migração desde a criação do aplicativo:
A imagem a seguir mostra todos os arquivos de migração que você executou. Cada um representa uma tabela no banco de dados:
Crie o arquivo CommentFactory
Crie um arquivo de fábrica que contenha sua função de definição. Para esta demonstração, você criará uma fábrica usando o Artisan:
php artisan make:factory CommentFactory.php
Este código cria um arquivo CommentFactory .php dentro da pasta database/factories .
A função de definição
A função dentro de CommentFactory define como Faker gera dados falsos. Edite-o para ficar assim:
public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->email(), 'body' => $this->faker->sentence(45), 'approved' => $this->faker->boolean(), 'likes' => $this->faker->randomNumber(5) ]; }
Este código diz ao Faker para gerar o seguinte:
- Um nome
- Um endereço de e-mail
- Um parágrafo que contém 45 frases
- Um valor aprovado que só pode ser verdadeiro ou falso
- Um número aleatório entre 0 e 9999
Conecte o modelo de comentário a CommentFactory
Vincule o model Comment
ao CommentFactory
declarando uma variável $model
protegida acima da definição:
protected $model = Comment::class;
Além disso, adicione o use App\Models\Comment;
às dependências do arquivo. O arquivo CommentFactory agora deve ficar assim:
Como semear o banco de dados
A propagação na programação significa gerar dados falsos aleatórios para um banco de dados para fins de teste.
Agora que você criou o modelo, executou as migrações e criou a definição dentro do CommentFactory, execute o seeder usando o arquivo DatabaseSeeder .
Crie o arquivo CommentSeeder
Crie um arquivo seeder que usa fábrica para gerar os dados:
php artisan make:seeder CommentSeeder.php
Este código cria um arquivo CommentSeeder .php dentro da pasta database/seeders .
Edite a função de execução
Conecte o modelo Comment ao CommentSeeder. Adicione o seguinte código dentro da função run:
Comment::factory()->count(50)->create();
Este código diz ao CommentSeeder para usar o modelo Comment e a função de definição de CommentFactory para gerar 50 comentários dentro do banco de dados. Além disso, adicione o use App\Models\Comment;
às dependências do arquivo. O arquivo CommentSeeder agora deve ficar assim:
Nota: Você pode configurar o Faker para criar dados locais. Por exemplo, você pode configurá-lo para gerar nomes italianos em vez de nomes aleatórios definindo faker_locale
dentro do arquivo app/config.php para it_IT
. Você pode ler mais sobre Faker Locales neste guia.
Execute o Semeador
Em seguida, execute o arquivo seeder com o Artisan:
php artisan db:seed --class=CommentSeeder
Esse código executa o arquivo seeder e gera 50 linhas de dados falsos no banco de dados.
O banco de dados agora deve ter 50 linhas de dados falsos que você pode usar para testar as funções do seu aplicativo:
Como redefinir o banco de dados
Ao usar os dados gerados para teste, redefina o banco de dados sempre que executar um teste. Suponha que você queira testar o recurso de alternância de comentários aprovados. Atualize o banco de dados após cada teste para garantir que os dados gerados anteriormente não interfiram em testes futuros.
Usar AtualizarBanco de Dados
Atualize o banco de dados usando o trait RefreshDatabase
dentro do arquivo de teste .
Navegue até ExampleTest.php dentro da pasta tests/Feature para o comentário use Illuminate\Foundation\Testing\RefreshDatabase;
e adicione a seguinte linha de código acima da função test_the_application_returns_a_successful_response
:
use RefreshDatabase;
O arquivo ExampleTest.php agora deve ter a seguinte aparência:
Execute o teste
Depois de adicionar o trait RefreshDatabase
ao arquivo de teste, execute o teste usando o Artisan:
php artisan test
Este código executa todos os testes no app e atualiza o banco de dados após os testes, conforme a imagem abaixo:
Agora, verifique o banco de dados para ver a tabela de comentários vazia:
Resumo
Este artigo abordou como criar um projeto Laravel, conectá-lo a um banco de dados e criar e configurar modelos, migração, fábrica e arquivos seeder para gerar dados aleatórios para o banco de dados. Ele também discutiu como redefinir o banco de dados após a execução de testes.
Agora você viu como o Laravel Factories e o Faker facilitam a geração de qualquer quantidade de dados de teste em minutos para testar um aplicativo ou até mesmo como um espaço reservado - com configuração mínima.
Quando seu aplicativo Laravel estiver pronto para ser implantado, você poderá fazê-lo nos serviços de hospedagem de aplicativos da Kinsta de forma rápida e eficiente.