Como gerar e usar registros falsos com fábricas de modelos Laravel

Publicados: 2023-04-28

O 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.

Testar seu aplicativo não deve ser uma reflexão tardia. As fábricas de modelos Laravel podem ajudar! Veja como ️ Clique para Tweetar

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:

Criando o projeto Laravel
Criando o projeto Laravel

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:

A página inicial do site Laravel
laravel

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:

O formulário Criar banco de dados no PHPMyAdmin
Criar formulário de banco de dados

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:

O arquivo de modelo de comentário
Arquivo de modelo de comentário

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:

Migrações bem-sucedidas
Migrações bem-sucedidas

A imagem a seguir mostra todos os arquivos de migração que você executou. Cada um representa uma tabela no banco de dados:

O banco de dados após as migrações
Banco de dados após as migrações

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:

O arquivo CommentFactory
O arquivo CommentFactory

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:

O arquivo CommentSeeder
Arquivo CommentSeeder

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.

Semente do banco de dados bem-sucedida
Semente do banco de dados bem-sucedida

O banco de dados agora deve ter 50 linhas de dados falsos que você pode usar para testar as funções do seu aplicativo:

50 linhas de dados no banco de dados
50 linhas de dados no banco de dados

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:

O arquivo ExampleTest
ExemploArquivo de teste

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:

Um teste de artesão bem-sucedido
Um teste de artesão bem-sucedido

Agora, verifique o banco de dados para ver a tabela de comentários vazia:

Um banco de dados de comentários vazio
Banco de dados de comentários vazio
A entrada manual de dados é coisa do passado! Automatize o teste de seu aplicativo com o Laravel Model Factories. Comece aqui! Clique para Tweetar

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.