avatar
Desenvolvedor Web MongoDB, ExpressJS, ReactJS, NodeJS.



12/11/2020 - Resolvendo os erros de implementação de testes Jest + MongoDB. Aleluia!!!


Possivemente ao tentar implementar testes unitários em Jest numa api Node Express com banco de dados noSql MongoDB tenha se deparado com os seguintes erros:

"Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout”

"A worker process has failed to exit gracefully and has been force exited, ..."

"Error: Status Code is 403 (MongoDB's 404)"

Compartilho aqui como consegui resolver estes erros. Espero que ajude.


Em seu package.json :

// "scripts": { "test": "jest" } ... "jest": { "verbose": true, "preset": "@shelf/jest-mongodb" } ... "devDependencies": { "@shelf/jest-mongodb": "^1.2.3", "jest": "^26.6.3", }

Na raiz do projeto , tenha um arquivo jest.config.js com

module.exports = { setupFilesAfterEnv: ['./jest.setup.js'], testEnvironment: 'node' }

Na raiz do projeto , jest.setup.js

// Aqui redefine o tempo de timeout do jest/jasmine jest.setTimeout(30000)

Também na raiz do projeto, jest-mongodb-config.js:

module.exports = { mongodbMemoryServerOptions: { instance: { dbName: 'jest' }, binary: { version: '4.2.10', // Version of MongoDB -Verifique em seu mongo atlas qual é a versão de seu banco skipMD5: true }, autoStart: false } };

O globalConfig.json é criado e editado automaticamente quando instalamos o @shelf/jest-mongodb

{"mongoUri":"mongodb://127.0.0.1:55519/jest?","mongoDBName":"jest"}

Na raiz, test-setup.js

// const mongoose = require('mongoose') const connectDB = require('./config/db') const config = require('config') const db = config.get('mongoTestURI') //é a URI de seu banco de dados de testes module.exports = { /**seta as ações de beforeAll que conecta ao BD e afterAll que encerra o DB * o parâmetro databaseName não é utilizado neste exemplo */ setupDB (databaseName) { beforeAll(async () => { connectDB(db) }); afterAll(async () => { mongoose.connection.close() }); } }

Os arquivos de testes (nome.test.js) devem chamar a configuração de conexão com o banco de dados logo depois dos imports. Definimos a configuração no arquivo test-setup.js

// const get_max_order = require('../service/get_max_order') const Content = require('../models/content'); const { setupDB } = require('../test-setup') setupDB() test('Should retrieve the max order of infos, banner or services', async () => { const content = await Content.findOne({}) expect(get_max_order(content, 'infos')).toBe(1) //função testada })

Na pasta config, temos um arquivo com o nome test.json com o conteúdo sendo apenas . Este arquivo carrega as configurações desejadas para algum ambiente. O Jest automaticamente muda o ambiente para test e com isso o sistema procura um arquivo com o nome test.json na pasta config. Quando não encontra dá o aviso de erro “WARNING: NODE_ENV value of 'test' did not match any deployment config file names.” Contudo este erro não atrapalha o teste. Neste exemplo não foi preciso ter conteúdo em test.json.


E o resultado :

texto alt

Este site usa cookies.Para ler a política de dados deste site clique aqui