JSagon NodeJS Framework

Construa aplicações eficientes e escaláveis de maneira simples e rápida.


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.