Integração com Testes - Jest
A JSagon está em pleno desenvolvimento de adapters que permitem uma fácil integração com outras tecnologias e ferramentas de terceiros. Porém, é completamente viável fazer uma implementação paralela enquanto determinado adapter ainda não esteja disponível para implementação e deploy para produção.
Este artigo tem como propósito demonstrar uma breve e simples integração com uma ferramenta de testes, utilizando o Jest e a JSagon Framework.
Primeiro, será preciso fazer uma pequena divisão na estrutura do arquivo ponto de entrada server.ts, para que seja possível utilizar a mesma configuração nos arquivos de testes. Para isso, crie um arquivo de nome app.ts no caminho dev/src/app.ts, e insira o seguinte código:
import { JSagon } from '@jsagon/core'
import configApp from './config/app.config'
const bootstrap = JSagon.create(configApp);
export default bootstrap
Agora, será preciso modificar o arquivo dev/src/server.ts como a seguir:
import bootstrap from './app'
bootstrap.listen(3000, () => {
console.log('Server online!')
})
A aplicação deve inicializar normalmente como antes executando o "npm run dev".
Para exemplificar a implementação de testes, criaremos uma simples action para multiplicar dois números no controlador HomeController do app Website. O arquivo dev/src/app/Website/modules/Base/Controller/HomeController.ts ficará da seguinte maneira:
import { AbstractController, Request, Response } from '@jsagon/core'
class HomeController extends AbstractController {
public async multiplicar(req: Request, res: Response) {
const first = Number(req.query.first)
const second = Number(req.query.second)
return res.json({ result: first * second })
}
}
export default HomeController
Agora registraremos uma rota para a action criada. No arquivo /dev/src/app/Website/modules/Base/Config/Routes.ts insira o código que corresponde a rota multiplicar:
import { Route } from '@jsagon/core'
import HomeController from '../Controller/HomeController'
const route = Route('/', HomeController)
.index()
.get({uri:'/multiplicar', action: 'multiplicar'})
export default route
Inicializando a aplicação e acessando a url http://localhost:3000/multiplicar?first=2&second=2 no browser de sua preferência, o resultado deverá ser apresentado.
Integração Jest
Primeiro, precisaremos de uma biblioteca que possibilite que façamos requisições para o servidor. Para isso, execute o seguinte comando para instalação do supertest:
npm i -D supertest
Para centralizar os arquivos de testes, criaremos uma pasta tests em dev/src. Crie um arquivo de nome base.test.ts como no caminho dev/src/tests/base.test.ts, e insira o seguinte código.
import request from 'supertest'
import bootstrap from '../app'
bootstrap.initialize()
const app = bootstrap.getApplication().getApp()
test('Teste action multiplicação', async (done) => {
const response = await request(app)
.get('/multiplicar').query({
first: 2,
second: 2
})
expect(response.body.result).toBe(4)
done()
})
No código anterior, importamos o bootstrap do arquivo app, inicializamos a aplicação e recuperamos a plataforma HTTP(getApp) para utilizar na requisição de teste. Logo abaixo, criamos um método que fará o processo de verificação da action e o resultado retornado. Os detalhes de implementação do Jest e supertest não serão abordados, sendo o artigo a respeito da integração em si.
Para executar o teste, rode o seguinte comando:
npm run test
O resultado será mostrado no término na execução do comando. Fique a vontade para realizar mudanças e testar diferentes resultados.
O objetivo do artigo foi demonstrar que aproveitando-se da estrutura da framework, pode-se realizar integrações com ferramentas de testes mantendo a organização e escalabilidade.
Qualquer dúvida, entre em contato por um dos meios disponíveis.