2017-10-15 7 views
1

Mon serveur express génère une erreur si des paramètres sont manquants (par exemple l'URI DB). Je veux tester à Mocha qu'il a effectivement jeté les erreurs, mais je ne sais pas comment je peux faire Mocha faire ça.Démarrage express du test Moka

if(!parameters.db) { 
    throw new Error('Please provide a db URI'); 
} 

J'ai une configuration de test comme celui-ci:

it('Throws Error when no db URI provided in production mode', function() { 
    expect(require('../server')).to.throw(); 
    done(); 
}); 

Lorsque mon application Express émet l'erreur, l'erreur est renvoyée dans la console et le test échoue (en fait, il ne se termine pas).


L'autre problème que j'ai est que Express vérifie seulement les paramètres si l'environnement est en mode de production. J'ai essayé de mettre l'environnement de processus en production dans la suite de tests, mais quand je l'exécute, le NODE_ENV est toujours configuré pour 'tester'.

before(function() { 
    env = process.env; 
    // This doesn't really set the environment when I run the tests. 
    process.env.NODE_ENV = 'production'; 
}); 

Répondre

1

Si vous essayez de tester une exception non gérée dans votre application essayer d'emballer vos invocation dans un try/catch et renvoyer une erreur si l'erreur n'est pas levée.

it('Throws Error when no db URI provided in production mode', function() { 
    let threwError = false; 
    try { 
    // create the server that throws the Error 
    require('../server'); 
    } catch (err) { 
    threwError = true; 
    } 
    expect(threwError, 'Didn\'t throw an error, when DB URI is empty').to.be.true; 
}); 
+0

Merci. L'approche de la solution a fonctionné, mais j'ai mis à jour votre code en corrigeant certaines parties qui ne fonctionnaient pas et en simplifiant (à mon avis). –

+1

C'est un peu plus simple, mais vous avez toujours un bug - vous devez définir 'threwError' en dehors de try/catch si vous voulez' expect() 'en dehors de try/catch. – doublesharp