2017-10-14 5 views
0

Est-il possible d'appeler un scénario de test de manière synchrone avec Mocha? Par exemple, j'ai le code ci-dessous:mocha: appel d'un scénario de test de manière synchrone

context('Context of test suite',() => { 
    it('test case name',() => { 
    //call expect() a few times 
    }) 
}) 
console.log('foo') 

Je veux courir, mais je veux garantir que foo ne sera pas imprimée qu'APRÈS le cas de test a exécuté et réussi ou échoué. it ne renvoie pas une promesse, ni context, donc je ne peux pas le faire en utilisant then. Est ce que je veux possible?

Ce scénario de test existe à l'intérieur du bloc after.

+0

Qu'essayez-vous exactement d'accomplir? Je suis sûr que vous connaissez le [Problème XY] (https://meta.stackexchange.com/a/66378) – Sidney

+0

Je ne comprends pas la question. J'essaie de faire exécuter un scénario de test de manière synchrone. – ewok

+1

Les tests s'exécutent de manière synchrone, à moins que vous ne fassiez quelque chose d'asynchrone à l'intérieur de ceux-ci. Si vous appelez 'expect()' quelques fois, il ne devrait pas y avoir de problème. –

Répondre

1

Vous pouvez déplacer ce console.log dans un imbriqué after:

describe('all my tests',() => { 

    it('#1', done => setTimeout(done, 500)) 
    it('#2', done => setTimeout(done, 500)) 
    it('#3', done => setTimeout(done, 500)) 

    after(() => { 

    context('Context of test suite',() => { 

     it('test case name',() => {}) 

     after(() => { 
     console.log('foo'); 
     }); 
    }) 

    }); 

}); 

Bien que j'ai du mal à comprendre pourquoi vous utilisez une configuration comme celui-ci. Un problème est que vous ne pouvez pas utiliser cette configuration dans un niveau racine after (un qui est en dehors de tout describe bloc), et aussi, after n'est pas destiné à des tests supplémentaires, il est destiné à nettoyer après tests.

je serais probablement utiliser quelque chose comme ceci:

describe('all my tests',() => { 

    it('#1', done => setTimeout(done, 500)) 
    it('#2', done => setTimeout(done, 500)) 
    it('#3', done => setTimeout(done, 500)) 

}); 

describe('Context of test suite',() => { 

    it('test case name',() => {}) 

    after(() => { 
    console.log('foo'); 
    }); 
}) 

à savoir Il suffit de placer la suite qui doit fonctionner en dernier, enfin, dernière. Vous pouvez déplacer ce dernier after à l'extérieur de la suite et le promouvoir au niveau de la racine, si vous le souhaitez.