# Test

# Jest


Jest es un marco de prueba de JavaScript encantador con un enfoque en la simplicidad.

Funciona con proyectos usando: Babel, TypeScript, Node, React, Angular, Vue y más.

# Instalación

sudo npm i jest -D

# Configuración

Para el uso de jest en nuestro proyecto es necesario indicarle el ambiente en el que se ejecutará. Por lo que es necesario crear un archivo de configuracion jest.config.js

module.exports = {
  testEnvironment: 'node'
}

# Uso

/*eslint-env jest */

const expect = require('expect')
const server = require('../index')

beforeAll((done) => {
    server.events.on('start', () => {
        done()
    })
})

afterAll((done) => {
    server.events.on('stop', () => {
        done()
    })
    server.stop()
})

const header = {
    url: '/v1/login',
    method: 'POST'
}

const correctPayload = {
    name: 'admin',
    password: 'admin'
}

const incorrectPayload = {
    name: 'sfvwerv',
    password: 'screv'
}

test('Regresa un mensaje de autentificacion correcta', async function(done){
    expect.assertions(2)
    const req = Object.assign({}, header, { payload: correctPayload})
    const res = await server.inject(req)
    expect(res.statusCode).toBe(200)
    expect(res.result).toHaveProperty('token')
    done()
})

test('Regresa un error por mandar credenciales incorrectas', async function (done) {
    expect.assertions(1)
    const req = Object.assign({}, header, { payload: incorrectPayload })
    const res = await server.inject(req)
    expect(res.statusCode).toBe(401)
    done()
})

Nota

Los archivos de test usan la nomenclatura: identificador.test.js para que jest los identifique sin necesidad de especificarlo como argumento en el comando

Ejemplo: login.test.js

# Ejecucion del test

jest --verbose --detectOpenHandles

Nota

--detectOpenHandles

Para intentar recoger e imprimir las manijas abiertas evitando que Jest salga limpiamente. Use esto en los casos en que necesite usar --forceExit para que Jest salga y pueda rastrear la razón. Implementado usando async_hooks, por lo que solo funciona en el Nodo 8 y posteriores.

--verbose

Muestra los resultados de la prueba individual con la jerarquía de la suite de prueba.