Padrão de projetos teste de API com graphQL

Se você tem acompanhado a nossa sequencia de tutoriais práticos de como automatizar seus testes de API nos começamos a abstrair nosso código da nossa spec e passamos a colocar eles dentro de uma estrutura de código.

Se quiser ver como ficou a abstração do nosso request leia o artigo anterior Jest + Supertest para teste de API GraphQL — Parte 4: criando validação de contrato.

Bom hoje a nossa spec se encontra dessa forma:

import { requestGraphqlTutorial } from "../../helpers/utils/request";
import { schemaValidator } from "../../helpers/utils/schemaValidator";
const schema = require("../../graphql/schema/states/states.schema.json")

describe('Criando a nova primeira spec', () => {
  var response = null
  var payload = {
    query: `query states($filter: StateFilterInput, $pagination: PaginationInput) {
            states(filter: $filter, page: $pagination) {
              totalCount
              edges {
                cursor
                node {
                  name
                  state_code
                  country_code
                  latitude
                  longitude
                }
              }
              pageInfo {
                hasNextPage
                hasPreviousPage
                endCursor
                startCursor
              }
            }
          }`,
    variables: {
      filter: {
        ciso2: "US",
      },
      pagination: {
        first: 5,
      },
    }
  }
  var baseURL = "https://api.geographql.rudio.dev";

  test('Vamos criar a primeira request ', async () => {
    response = await requestGraphqlTutorial(baseURL, payload)
    schemaValidator(response.body, schema)
    console.log(JSON.stringify(response.body))
  });
});

Ainda temos o nosso payload dentro da spec, e acredite temos como melhor isso e vamos fazer agora.

Dentro da pasta graphql criada no tutorial anterior iremos adicionar entro dela adicionar a pasta a query.

E dentro desta pasta irei criar uma chamada states porque quero armazenar dentro dela todas as querys relacionadas a states. Dentro desta pasta irei criar o arquivo states.js e dentro dele será adicionado a nossa query, desta forma.

export const queryDataStates = () => ({
  query: `query states($filter: StateFilterInput, $pagination: PaginationInput) {
        states(filter: $filter, page: $pagination) {
          totalCount
          edges {
            cursor
            node {
              name
              state_code
              country_code
              latitude
              longitude
            }
          }
          pageInfo {
            hasNextPage
            hasPreviousPage
            endCursor
            startCursor
          }
        }
      }`,
  variables: {
    filter: {
      ciso2: "US",
    },
    pagination: {
      first: 5,
    },
  },
});

export const queryDataStates = () => função sendo exportada retornando dois parâmetros, sendo eles: a query e as variables.

Agora na nossa spec iremos importar está função, e no lugar do nosso payload adicionando a nossa função.

import { requestGraphqlTutorial } from "../../helpers/utils/request";
import { schemaValidator } from "../../helpers/utils/schemaValidator";
import { queryDataStates } from "../../graphql/query/states/states";
const schema = require("../../graphql/schema/states/states.schema.json")

describe('Criando a nova primeira spec', () => {
  var response = null
  var baseURL = "https://api.geographql.rudio.dev";

  test('Vamos criar a primeira request ', async () => {
    response = await requestGraphqlTutorial(baseURL, queryDataStates())
    schemaValidator(response.body, schema)
    console.log(JSON.stringify(response.body))
  });
});

Rodando nossos testes agora, vemos que ele continua funcionando e passando.

Parabéns! Agora você aprendeu a colocar as querys e mutation em um arquivo separado facilitando assim a manutenabilidade e performance do seu código.

E se você quer ver como o repositório final se encontra só acessar o meu portfolio no Github https://github.com/pricaimiTech/geographqlJestAPI

E não esqueça de me seguir nas minhas redes sociais https://linktr.ee/priscilacaimi

Gostou do conteúdo? Não deixe de compartilhar!

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *