Como Iniciar Testes Mocha depois da Inicialização COMPLETA do App Express

Esta é uma dica rápida para quem está arrancando os cabelos tentando solucionar o problema em que o app do Express não é completamente inicializado antes que os testes rodem.

Em determinado projeto estive usando o framework Express, junto com o package Mongoose e Mocha (+Chai) para testes. Usando o Mongoose eu registro os models como tal junto à ferramenta e então recupero-os através do código:

mongoose.model('NomeDoModel');

Particularmente eu prefiro esse método, pois os meus models estarão todos disponíveis no objeto mongoose em qualquer lugar.

Se você está vendo este artigo as chances são de que tenha se deparado com o seguinte erro no console assim que executou os testes:

MissingSchemaError: Schema hasn't been registered for model [...]

Outro erro comum pode ser um erro devido a uma rota inexistente. Essas coisas acontecem justamente pelo motivo que desconfiamos: Mocha não espera o servidor ser completamente inicializado.

Não temas. Eis uma solução simples para o problema: Emitir um evento.

Dentro do callback do método listen da aplicação Express emita um evento qualquer com app.emit('nomeDoEvento'); .

Exemplo de emissão de evento dentro do arquivo app.js ou server.js

Em seguida, no seu arquivo de testes (se houver hierarquia de arquivos de testes a espera do evento deve acontecer apenas no before do arquivo da hierarquia mais alta, ou seja, no arquivo de teste pai. Dentro do bloco before , é só aguardar o evento:

E é isso! Espero ter ajudado. Um abraço!

Show your support

Clapping shows how much you appreciated Rafael Souza’s story.