Usando o teste de componente Cypress em sua aplicação Next.js com TypeScript e GraphQL

junho 19, 2024 por devdaily_8e41o6
Usando o teste de componente Cypress em sua aplicação Next.js com TypeScript e GraphQL

Em meu post anterior, discuti como utilizar a React Testing Library para testar aplicações React. Recentemente, o Cypress introduziu uma nova forma de testar componentes sem a necessidade de uma solução end-to-end completa. Decidi experimentar e fiquei agradavelmente surpreso com sua eficácia. Integrei-o sem problemas ao meu projeto atual, que possui uma base de código robusta. Este tipo de teste é ideal para cenários comuns, como aquele descrito no meu último post, e vou demonstrá-lo novamente aqui usando o Cypress. Já abordei a importância dos testes em meu blog anterior, então vamos direto ao código.

Passo 1: Iniciar o Repositório

Primeiramente, criaremos uma nova aplicação Next.js. Atualmente, o Cypress não suporta testes de componente com componentes de servidor ou versões do Next.js acima de 14. Para mais detalhes, consulte a documentação do Next.js sobre testes com Cypress.

npx create-next-app@latest blog-todo-graphql --typescript

Passo 2: Instalar Apollo Client e GraphQL

Em seguida, instalaremos o Apollo Client e o GraphQL para lidar com nossas consultas e mutações GraphQL, além de não esquecer da biblioteca Cypress.

npm install @apollo/client graphql cypress

Passo 3: Organização da Estrutura do Projeto

Limparemos a estrutura do projeto excluindo a pasta api.

Passo 4: Ajustar o Arquivo index.tsx

Atualize o arquivo index.tsx para incluir o seguinte conteúdo:

import AddTodo from "@/components/add-todo";
import ListTodos from "@/components/list-todos";
const Home = () => { return ( <div> <h1>Todo List</h1> <AddTodo /> <ListTodos /> </div> );
};
export default Home;

Passo 5: Adicionar os Arquivos Necessários ao Projeto

Aqui estão os arquivos que precisamos adicionar ao nosso projeto, junto com uma breve explicação de seus propósitos:

  • schemas/index.gql – Define o esquema GraphQL para nossa aplicação Todo, incluindo o tipo Todo, uma consulta para buscar todos e uma mutação para adicionar um novo.
  • components/add-todo.tsx – Este componente fornece um formulário para adicionar novos todos. Ele usa o Apollo Client para enviar uma mutação GraphQL para adicionar o todo e busca novamente a lista de todos após adicionar um novo.
  • components/list-todos.tsx – Este componente busca e exibe uma lista de todos usando o Apollo Client. Mostra estados de carregamento e erro enquanto os dados estão sendo buscados.
  • mocks/apollo-mock-provider.tsx – Este componente fornece um Apollo Client fictício para fins de teste. Ele usa o MockedProvider de @apollo/client/testing para fornecer dados fictícios para nossos testes.

Executando Seu Teste

Para abrir a GUI de Teste de Componente do Cypress, use o seguinte comando:

npx cypress open --component

Vantagens dos Testes Independentes

Como você pode ver, neste setup, não precisamos adicionar o componente ApolloProvider à nossa aplicação principal, apenas o MockedProvider para nossos testes. É importante notar que o ApolloProvider e MockedProvider têm propósitos diferentes e são independentes um do outro. Uma vez que este conteúdo foca em demonstrar os testes e não a aplicação em execução, não precisamos adicionar o ApolloProvider aqui. No entanto, em uma aplicação real, você deve incluir o ApolloProvider para integrar sua aplicação com a API real.

Conclusão

O teste de frontend é uma parte indispensável do desenvolvimento web moderno. Ele garante que sua aplicação seja confiável, mantida e ofereça uma ótima experiência ao usuário. Se você leu meu artigo anterior e tentou usar a React Testing Library, verá que o Teste de Componente Cypress é muito mais fácil para cenários mais complexos. Por que não experimentar esta nova abordagem e compartilhar suas experiências comigo? Estou ansioso para ouvir sobre seus resultados. Testes felizes! Inscreva-se na newsletter do blog devdaily.info para mais dicas e truques de desenvolvimento!