https://github.com/jonnathan23/rest_api_node_ts_server
Backend con pern para administrador de productos
https://github.com/jonnathan23/rest_api_node_ts_server
documentation jest nodejs pern supertest swagger testing typescript
Last synced: about 2 months ago
JSON representation
Backend con pern para administrador de productos
- Host: GitHub
- URL: https://github.com/jonnathan23/rest_api_node_ts_server
- Owner: Jonnathan23
- Created: 2024-12-08T05:00:40.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-28T17:23:08.000Z (over 1 year ago)
- Last Synced: 2025-02-06T13:17:51.028Z (over 1 year ago)
- Topics: documentation, jest, nodejs, pern, supertest, swagger, testing, typescript
- Language: TypeScript
- Homepage: https://github.com/Jonnathan23/frontend-administrador-productos
- Size: 14.2 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
Awesome Lists containing this project
README
# Backend
## Testing con JEST
Jest puede leer archivos de 3 formas:
* Archivos con la extensión .test.js
* Archivos con la extensión .spect.js
* Archivos dentro de la carpeta __tests__
### Instalación de dependencias
```bash
npm i -D supertest @types/supertest jest @types/jest ts-jest
```
### Crear archivo jest.config
```bash
npx ts-jest config:init
```
### Configuraciones
Configuración en el package.json para ejecutar tests
```json
"test": "jest --detectOpenHandles"
```
Para evitar llenar nuestra base de datos con los objetos que creamos en nuestros tests podemos limpiarla de esta forma
```ts
const clearDB = async () => {
try {
await db.sync({ force: true })
console.log('Datos eliminados correctamente')
exit()
} catch (error) {
console.log(error)
exit(1)
}
}
// detectar el comando de nuestra terminal para ejecutar la función
if (process.argv[2] === '--clear') {
clearDB()
}
```
Para ejecutar ese código de forma automática lo que podemos hacer es colocar el comando reservado ``"pretest"``, el cual se ejecuta automaticamente antes del comando ``"test"`` ,es decir, no es necesario llamarlo desde nuestra terminal
```json
"pretest": "ts-node ./src/data --clear"
```
### Code Coverage
Es una metrica utilizada para medir la cantidad de codigo cubierto por las pruebas.
#### Metricas de coverage
* < 60% -> No es suficiente
* 60% - 80% -> se puede mejorar
* >= 80% -> Es suficiente y una buena medida
Para ejecutar coverage, demos configurar nuestro package.json, colocar esto en nuestros scripts
```json
"test:coverage": "npm run pretest && jest --detectOpenHandles --coverage"
```
### Forzar errores
Para simular errores en nuestro código podemos utilizar ``mock``, le pasamos como parametro la ruta de nuestra variable, en este caso ``db``. Posterior a ello con ``spyOn()`` en su parametro le pasamos nuestra variable y el metetodo que quemaros observar su comportamiento, por ejemplo ``authenticate()`` en formato ``string``
```ts
jest.mock('../config/db')
describe('connect DB', () => {
it('should hanlde databe connection error', async () => {
jest.spyOn(db, 'authenticate').mockRejectedValueOnce(new Error('Error al conectar a la BD'))
const consoleSpy = jest.spyOn(console, 'log')
await connectDB()
expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('Error al conectar a la BD'))
})
})
```
## Documentacion
instalar dependencias
```bash
npm i swagger-jsdoc swagger-ui-express
```
```bash
npm i -D @types/swagger-jsdoc @types/swagger-ui-express
```
## Morgan
```bash
npm i morgan
```