Ao explorar as melhores práticas para estruturar testes no Cypress, surgem diversas opções, cada uma com suas vantagens e considerações. Uma decisão crucial é escolher entre o uso de PageObjects, Custom Commands e Funções JavaScript Simples. Cada abordagem tem seu espaço e pode se adequar a diferentes contextos de projeto e equipes de desenvolvimento.
1. Pense bem antes de utilizar PageObjects
Um artigo de 2019, da comunidade de Cypress, levantou a discussão sobre as reais desvantagens de utilizar o “famoso” PageObjects. Onde esses têm como objetivo tornar os testes de ponta a ponta legíveis e fáceis de manter.
Porém se faz necessário escrever uma hierarquia de classes PageObject inteira, onde partes da página usam diferentes objetos de uma página WEB, compondo-os usando orientação a objetos.
Um teste típico usaria um PageObjects como no exemplo abaixo.
2. Utilize Cypress Custom Commands
Nós não precisamos usar a PageObject no Cypress. Pois podemos gerar toda essa lógica para os Custom Commands do Cypress, os quais não possuem nenhum estado interno e apenas permitem a reutilização do código.
Por exemplo, podemos implementar um comando “login”:
Depois de adicionar um Custom Commands esse passa a ser um comando totalmente integrado ao cypress, gerando tanto a vantagem de ser utilizado como qualquer outro comando integrado interno. E utilizando-se de boas práticas, se torna tão organizado quanto o próprio PageObjects.
No exemplo abaixo o uso de dois comandos integrados, no caso o cy.visit (interno) e o cy.login (customizado). E percebam que o uso é exatamente igual.
3. Use também funções Java Scripts simples
O QA expriente ainda tem a opção de utilizar funções JavaScripts simples, sem a necessidade de criar Custom Commands.
Funcionam tão bem, se não melhor, pois o sistema de tipos está examinando as assinaturas de funções individualmente, ou seja, o sistema de tipos está garantindo que as funções são usadas de acordo com suas assinaturas declaradas.
Nese caso, então, há apenas o uso do comando integrado interno, o cy.visit, e o da função JavaScript login criada num arquivo utils.js.
E percebam também que o uso é tão simples quanto.
4. Discussão sobre performance
A performance em CypressJS geralmente não é significativamente afetada pela escolha entre Custom Commands, Page Objects ou funções JavaScript simples. O Cypress é projetado para executar testes de forma eficiente e oferece um desempenho robusto.
- Page Objects:
- Page Objects são úteis para organizar elementos da interface do usuário e métodos relacionados a páginas específicas. A estrutura organizada facilita a manutenção e a compreensão do código.
- A criação de Page Objects pode tornar os testes mais lentos, que os demais, porque forçam os testes a sempre passarem pela interface de usuário do aplicativo.
- E é importante equilibrar a modularidade com a praticidade. Criar uma quantidade excessiva de Page Objects pode tornar o código mais complexo.
- Custom Commands:
- Custom Commands são convenientes para encapsular sequências de comandos Cypress em funções reutilizáveis. A principal vantagem é a reutilização de lógica de teste em vários testes como comando integrados.
- E é importante manter os Custom Commands organizados e evitar a criação de comandos muito genéricos que podem levar a uma complexidade desnecessária.
- Funções JavaScript Simples:
- Funções JavaScript simples referem-se a abordagens mais diretas, sem encapsulamento especializado para comandos Cypress. Essa abordagem pode ser adequada para casos simples ou projetos menores.
- Em termos de desempenho, não há um grande impacto, mas a falta de organização estruturada pode levar a dificuldades na manutenção à medida que o projeto cresce.
Escolha a abordagem que faz mais sentido para o seu projeto e equipe. Em termos de desempenho, a diferença entre essas abordagens é geralmente mínima. O Cypress é otimizado para execução eficiente de testes, independentemente da estrutura específica do código.
Priorize a clareza, manutenção e reutilização de código ao fazer escolhas de arquitetura. Seja consistente na aplicação das práticas escolhidas e certifique-se de que a equipe está confortável com a abordagem adotada. Vale a pena revisar a documentação do Cypress e as discussões na comunidade para obter as práticas recomendadas mais recentes.