DEV Community

Cover image for Conheça o recycle(♻️) do Laravel
Tarcisio Araújo
Tarcisio Araújo

Posted on

Conheça o recycle(♻️) do Laravel

Quando o assunto é criar estruturas de dados complexas para testes, o Laravel oferece uma ferramenta extremamente poderosa que pode ajudar a economizar recursos e possibilitar a criação de ambientes específicos, garantindo maior assertividade nos testes.

Esta ferramenta é o método recycle(), ele oferece o poder de reutilizar instâncias de models em chamadas a Factories. Isso pode ser extremamente útil quando você precisa criar cenários com Models contendo relações em comum. Por exemplo:

// Cria um Time $team = Team::factory()->create(); // Cria 3 Vendedores associando-os ao mesmo Time através do recycle $sellers = Seller::factory(3)->recycle($team)->create(); 
Enter fullscreen mode Exit fullscreen mode

No exemplo acima, criamos um cenário específico com 3 instâncias de Vendedores associadas ao mesmo Time. Dessa forma, é possível realizar testes com essa estrutura de dados definida, sem a necessidade de configurar manualmente as relações através dos atributos do create().


Utilizando Collections 🗂️

Além de funcionar com instâncias únicas de Models, o método recycle() também aceita Collections. No entanto, quando utilizado com uma Collection, seu comportamento difere do uso básico, oferecendo uma camada extra de flexibilidade na criação de cenários de teste.

$teams = Team::factory(3)->create(); $sellers = Seller::factory(30)->recycle($teams)->create(); 
Enter fullscreen mode Exit fullscreen mode

Nesse trecho de código passamos uma Collection com três Times distintos no recycle. Desta forma, a cada Vendedor criado, será escolhido aleatoriamente um dos três Times para ser atribuído, construindo um ambiente controlado em que todos os Vendedores estão associados a um desses Times.


Como isso aumenta a performance do meu teste? 📈

Ao criar conjuntos de dados com uma grande quantidade de registros, reciclar instâncias irá poupar recursos e diminuir o número de inserções no banco de dados.

$sellers = Seller::factory(3)->create(); $sales = Sale::factory(500)->create(); 
Enter fullscreen mode Exit fullscreen mode

Sem o uso do recycle, atingimos um total de 1003 queries! Sendo 3 para criar os primeiros Vendedores, 500 para criar cada Venda e mais 500 para inserir, individualmente, os Vendedores associados a cada Venda.

$sellers = Seller::factory(3)->create(); $sales = Sale::factory(500)->recycle($sellers)->create(); 
Enter fullscreen mode Exit fullscreen mode

Agora, utilizando o recycle, conseguimos uma redução de 500 chamadas ao banco de dados! Eliminando as instâncias individuais de Vendedores realizadas pelas Factory de Venda.


Conclusão

Reutilizando instâncias de models, ele simplifica a criação de cenários complexos e reduz significativamente o número de queries realizadas. Resultando em testes mais rápidos, eficientes e fáceis de manter. O recycle() acaba mostrando-se uma ferramenta essencial no repertório de qualquer desenvolvedor Laravel, especialmente para quem trabalha com desenvolvimento orientado a testes.

Referência:

- Documentação oficial do Laravel.

Top comments (0)