Falando em CodeceptJS

O CodeceptJS é um framework de testes, com sintaxe em BDD, que conta com a ajuda de diferentes auxiliares. Veja abaixo:

Fonte: https://codecept.io/basics

Para entender um pouco melhor seu funcionamento, faremos um teste simples em JavaScript, utilizando o WebDriverIO.

Configurando o CodeceptJS

Bora fazer as configurações:

npm init -y
npm install codeceptjs webdriverio --save-dev
npx codeceptjs init
? What helpers do you want to use?
❯◉ WebDriver
 ◯ Protractor
 ◯ Puppeteer
 ◯ Appium
 ◯ Nightmare
 ◯ FileSystem
npx codeceptjs gt

Mais detalhes da configuração, consulte o link: https://codecept.io/quickstart-webdriver.

Criando arquivo de teste

Uma vez que a configuração do codeceptJS tenha sido realizada, nomeie o arquivo gerado com “api_test.js”, abra-o em um editor de sua preferência.

Vamos criar uma função assíncrona que fará uma requisição com o método GET em uma página http ( http://www.mocky.io/v2/5de979ea31000029ac6b195f ):

async function getTestApi() {
  return await axios.get(`http://www.mocky.io/v2/5de979ea31000029ac6b195f`, {
    'Content-Type': 'application/json'

  })
}

Vamos entender o que fizemos até aqui?

Como dissemos, criamos uma função assíncrona chamada “getTestApi”, essa função, realiza uma requisição na página (http://www.mocky.io/v2/5de979ea31000029ac6b195f) e aguarda um retorno (return await).

O axios gerencia a requisição, e usa a função GET para identificar o método, podemos usar outros gerenciadores, neste caso optamos pelo axios, pois ele interage com XMLHttpRequest e com a o http do node, de forma que o mesmo código utilizado para fazer requisições ajax no browser também funciona no servidor, outra vantagem é que as requisições feitas através da biblioteca retornam uma promise, compatível com a nova versão do JavaScript – ES6. (Fonte: http://codeheaven.io/how-to-use-axios-as-your-http-client-pt/).

Configurando o “axios”

Abra o terminal e execute o seguinte comando:

npm install axios

Voltando ao nosso arquivo de teste…

Precisamos declarar uma constante para chamar o axios. Fica assim:

const gerenciador = require('axios')

Interpretando BDD

Tudo certo, agora vamos ao nosso cenário, o mesmo precisará de uma biblioteca para interpretar nosso BDD. Vamos utilizar o chai, que é compatível com nossa estrutura em javaScript (https://www.chaijs.com/guide/styles/).

No terminal, execute:

npm install chai

Agora precisamos chamar o chai no nosso teste, igual fizemos com o axios:

const chai = require("chai");

Boa, nosso framework já consegue interpretar um BDD. Então vamos pro que interessa?

Criando cenários

Feature("Exemplo básico");

Scenario('Retorno mocky.io', async () => {
  mockio = await getTestApi()
  console.log(mockio.data)
})

Entendendo o que fizemos acima:

  • Criamos uma funcionalidade chamada “Exemplo básico”.
  • Dentro da funcionalidade, criamos um cenário de testes, no caso, o “Retorno mocky.io”.
  • Declaramos uma variável “mockio” que armazena o retorno da nossa função “getTestApi”.
  • Exibimos o retorno no nosso console.log, fica assim:

Roda aí pra ver se deu tudo certo!

Mas, antes da uma olhada na estrutura do seu teste, tem que ficar parecido com o meu:

const axios = require('axios');
const chai = require("chai");

async function getTestApi() {
  return await axios.get(`http://www.mocky.io/v2/5de979ea31000029ac6b195f`, {
    'Content-Type': 'application/json'

  })
}

Feature("Exemplo básico");

Scenario('Retorno mocky.io', async () => {
  mockio = await getTestApi()
  console.log(mockio.data)
})

Executa esse comando no terminal, dentro da pasta do projeto:

npx codeceptjs run tests/api_test.js.js

Sucesso não é?

Vamos finalizar com uma validação?

Cria ai um segundo cenário:

Scenario('Vadidar mocky.io', async () => {
  mockio = await getTestApi()
  expect(mockio.data.type).to.equal('Teste de API')
})

Sacou o que estamos fazendo?

O “expect” neste caso, é uma expressão do chai, que espera que o retorno do “type” seja igual a “Teste de API”.

Para que o “expect” seja identificado, precisamos declarar ele no nosso projeto, desta forma:

const expect = chai.expect;

Nosso teste fica assim:

const axios = require('axios');
const chai = require("chai");
const expect = chai.expect;

async function getTestApi() {
  return await axios.get(`http://www.mocky.io/v2/5de979ea31000029ac6b195f`, {
    'Content-Type': 'application/json'

  })
}

Feature("Exemplo básico");

Scenario('Retorno mocky.io', async () => {
  mockio = await getTestApi()
  console.log(mockio.data)
})

Scenario('Vadidar mocky.io', async () => {
  mockio = await getTestApi()
  expect(mockio.data.type).to.equal('Teste de API')
})

Roda ai, o retorno tem que ser algo assim:

Gostou? Tem algo legal pra compartilhar? Manda pra gente: https://www.falandoemtestes.com.br/compartilhe/artigo/

Espero muito ter ajudado de alguma forma. Se precisar, entra em contato comigo:

Eleandra Bruna S. Monqueiro

Há 8 anos atuo como agente da qualidade, com expertise em análise, qualificação, desenvolvimento e implantação de processos, além de desempenhar papéis de execução, planejamento e liderança times de qualidade de software.

https://www.linkedin.com/in/eleandra-monq/