2017-09-06 9 views
3

Dire que j'ai un objet dans mon code, disons un utilisateur.NodeJS, Sinon: Comment tester certaines fonctions sont appelées à un événement

L'utilisateur est un eventEmitter donc dans de nombreux endroits dans le code que je aime:

User.on('register', notifyFriends); 
User.on('register', sendWelcomeEmail); 

Ces lignes sont dans des fichiers différents en principal.

Je veux vous assurer que les fonctions correspondantes sont appelées dans mon test si je fais quelque chose comme ceci:

describe('User Events',() => { 
    before(() => { 
    sinon.stub(userListeners, 'notifyFriends').callsFake(async() => {}); 
    }); 
    after(() => { 
    userListeners.notifyFriends.restore(); 
    }); 

    describe('register',() => { 
    it('should trigger the "notifyFriends" handler once user is registered',() => { 

     UserModel.emit('register'); 
     expect(userListeners.notifyFriends).to.be.calledOnce(); 

    }); 
    }); 
}); 

problème est la fonction est exécutée après l'instruction alors attendez-vous le test échoue évidemment.

Un moyen facile de le résoudre est d'exécuter l'attendre à l'intérieur d'un bloc de délai d'attente et nous espérons que la fonction est appelée dans le temps imparti.

Mais je veux savoir s'il existe une meilleure façon de le faire.

Répondre

0

Le problème était différent.

Le code qui s'enregistre auprès des gestionnaires a été exécuté avant la création du stub. (Donc, la fonction n'a pas été un espion encore)

alors assurez-vous d'exécuter le talon, seulement courir après le reste du code dans l'application qui enregistre les evetns.