Testar é essencial para o desenvolvimento web. O Model Factories do Laravel definem registros do banco de dados de maneira previsível e facilmente replicável, para que os testes do seu aplicativo sejam consistentes e controlados. O Model Factories definem um conjunto de atributos padrão para cada um dos seus modelos Eloquent.

Por exemplo, se você estiver criando um aplicativo de blog que permita que autores e moderadores aprovem comentários antes que eles sejam publicados, precisará testar se a função funciona corretamente antes de implantá-la para os 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 o Model Factories 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:

  • XAMPP
  • Composer

O XAMPP é uma distribuição gratuita e fácil de instalar do Apache 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 você estiver instalando o XAMPP para MacOS ou este guia para Linux. Este tutorial usa o XAMPP no Windows.

O Composer é uma ferramenta que permite que você defina, instale e baixe os pacotes dos quais seu aplicativo web depende no desenvolvimento e na produção. Este tutorial usa a versão v2.4.4 do Composer, que requer a versão 7.2+ do PHP. No tutorial, utilizaremos o Composer para instalar o instalador do Laravel.

Você também pode fazer o download do código completo do projeto para acompanhá-lo.

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 em como fazer isso.

Instalando o instalador do Laravel

Para criar um projeto Laravel rapidamente, você deve instalar o instalador do Laravel:

composer global require laravel/installer

Este código instala o instalador do Laravel globalmente em seu computador.

Criando um projeto do Laravel

Em seguida, crie um projeto Laravel executando o seguinte:

laravel new app-name

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

Iniciando o aplicativo

Agora você pode alterar o diretório para app-name e iniciar o projeto usando a ferramenta de interface de linha de comando (CLI) do próprio Laravel, o Artisan:

php artisan serve

Esse código inicia o projeto e o conecta ao localhost:8000 ou a qualquer outra porta disponível se a porta 8000 estiver em uso. Em localhost:8000, você deverá ver algo como isso:

Laravel.
Laravel.

Criando 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. Acesse localhost/phpmyadmin e clique em New na barra lateral:

Criar formulário de banco de dados.
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 Create para criar um banco de dados.

Editando 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, o nome de usuário, a porta, a senha e o host. Agora você está pronto para começar a criar o Model Factories.

Observação: substitua os valores pelas credenciais do banco de dados que você possui. Além disso, se você encontrar o erro “Access denied for user”, coloque os valores DB_USERNAME e DB_PASSWORD entre aspas duplas.

Como gerar dados falsos

Após criar o aplicativo e conectá-lo ao banco de dados, agora você pode criar os arquivos necessários para gerar dados falsos no banco de dados.

Criando o modelo de comentário

Crie o arquivo de modelo para interagir com as tabelas do banco de dados. Para criar um modelo, use o Artisan:

php artisan make:model Comment

Esse código cria um arquivo Comment.php dentro da pasta app/Models com algum código padrão. Adicione o seguinte código abaixo da linha use HasFactory;:

 protected $fillable = [
      'name',
      'email',
      'body',
      'approved',
      'likes'
    ];

Esse código lista os campos que você deseja permitir atribuições em massa porque o Laravel protege seu banco de dados contra atribuições em massa por padrão. Agora, o arquivo de modelo do Comment deve ter a seguinte aparência:

Arquivo de modelo de comentário
Arquivo de modelo de comentário

Criando o arquivo de migração

Após criar o arquivo de modelo e declarar a array $fillable, você deve criar o arquivo de migração usando o comando abaixo:

php artisan make:migration create_comments_table

Observação: A convenção de nomenclatura para a criação de migrações no Laravel geralmente é snake_case também conhecido como underscore_case. A primeira palavra é a ação, a segunda palavra é um plural do modelo e a última palavra é o recurso criado dentro do projeto. Isso significa que você escreverá create_books_table ao criar uma migração para um modelo de livro.

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

Executando as migrações

Criar e editar o arquivo de migrações não fará nada até que você as execute usando a linha de comando. Se você observar o gerenciador de banco de dados, ele ainda estará vazio.

Execute as migrações usando o Artisan:

php artisan migrate

Esse comando executa todas as migrações dentro de database/migrations 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:

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

Criando 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

Esse 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 o Faker gera dados falsos. Edite para que fique 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)
     ];
    }

Esse 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

Conectando o modelo de comentário ao CommentFactory

Vincule o modelo Comment a CommentFactory declarando uma variável protegida $model acima da definição:

protected $model = Comment::class;

Além disso, adicione o use AppModelsComment; às dependências do arquivo. Agora, o arquivo CommentFactory deve ter a seguinte aparência:

O arquivo CommentFactory
O arquivo CommentFactory

Como usar o Seeder no banco de sados

 

Seeding em programação significa gerar dados falsos aleatórios para um banco de dados para fins de teste.

Agora que você criou o modelo, executou migrações e criou a definição dentro do CommentFactory, execute o seeder usando o arquivo DatabaseSeeder.

Criando o arquivo CommentSeeder

Crie um arquivo seeder que use o factory para gerar os dados:

php artisan make:seeder CommentSeeder.php

Esse código cria um arquivo CommentSeeder.php dentro da pasta database/seeders.

Editando a função Run

Conecte o modelo Comment ao CommentSeeder. Adicione o seguinte código dentro da função de execução:

Comment::factory()->count(50)->create();

Esse código diz ao CommentSeeder para usar o modelo Comment e a função de definição do CommentFactory para gerar 50 comentários dentro do banco de dados. Além disso, adicione o endereço use AppModelsComment; às dependências do arquivo. Agora, o arquivo do CommentSeeder deve ter a seguinte aparência:

Arquivo CommentSeeder
Arquivo CommentSeeder

Observação: 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 como it_IT. Você pode ler mais sobre o Faker Locales neste guia.

Executando o seeder

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 de banco de dados bem-sucedida
Semente de 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 testes, redefina o banco de dados sempre que você 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.

Use RefreshDatabase

Atualize o banco de dados usando a característica RefreshDatabase dentro do arquivo de teste.

Navegue até ExampleTest.php dentro da pasta tests/Feature até o comentário use IlluminateFoundationTestingRefreshDatabase; e adicione a seguinte linha de código acima da função test_the_application_returns_a_successful_response:

use RefreshDatabase;

Agora, o arquivo ExampleTest.php deve ter a seguinte aparência:

Arquivo ExampleTest
Arquivo ExampleTest

Executando o teste

Depois de adicionar a característica RefreshDatabase ao arquivo de teste, execute o teste usando o Artisan:

php artisan test

Esse código executa todos os testes no aplicativo e atualiza o banco de dados após os testes, conforme mostrado na imagem abaixo:

Um teste bem-sucedido do Artisan
Um teste bem-sucedido do Artisan

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

Banco de dados de comentários vazio.
Banco de dados de comentários vazio.

Resumo

Este artigo abordou como criar um projeto Laravel, conectá-lo a um banco de dados e criar e configurar modelos, migração, factory e arquivos seeder para gerar dados aleatórios para o banco de dados. Também foi discutido 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ê pode fazer isso rapidamente e de forma eficiente nos serviços de Hospedagem de Aplicativos da Kinsta.

Steve Bonisteel Kinsta

Steve Bonisteel is a Technical Editor at Kinsta who began his writing career as a print journalist, chasing ambulances and fire trucks. He has been covering Internet-related technology since the late 1990s.