Mocha pass variable au test suivant

describe('some test', function(){ // Could put here a shared variable it('should pass a value', function(done){ done(null, 1); }); it('and then double it', function(value, done){ console.log(value * 2); done(); }); }); 

Ce qui précède ne fonctionnerait pas actuellement en moka.

Une solution serait d'avoir une variable partagée entre les tests, comme indiqué ci-dessus.

Avec async.waterfall() c'est très possible et j'aime vraiment. Y a-t-il un moyen de le faire dans la moka?

Merci!

Il est préférable de garder les tests isolés afin qu'un test ne dépende pas d'un calcul effectué dans un autre. Appelons le test qui devrait passer un test de valeur A et le test qui devrait l'obtenir. Quelques questions à considérer:

  1. Le test A et le test B sont-ils vraiment deux tests différents? Sinon, ils pourraient être combinés.

  2. Est-ce que le test A est destiné à fournir le test B avec un appareil à tester? Dans l'affirmative, le test A devrait devenir le rappel pour un appel before ou before . Vous passez essentiellement les données en les attribuant aux variables dans la fermeture de describe .

     describe('some test', function(){ var fixture; before(function(done){ fixture = ...; done(); }); it('do something', function(done){ fixture.blah(...); done(); }); }); 

J'ai lu le code de Mocha, et pourvu que je n'oublie pas quelque chose, il n'y a aucun moyen d'appeler describe , it ou le rappel de retour pour passer des valeurs. Donc, la méthode ci-dessus est celle-ci.

Je suis très d'accord avec ce que Louis a dit, et ce sont les raisons pour lesquelles Mocha ne l'appuie pas. Pensez à la méthode asynchique que vous avez mentionnée; Si votre premier test échoue, vous obtenez une défaillance de cascade dans le reste de ceux-ci.

Votre seul moyen d'y parvenir est, comme vous le dites, de repérer une variable au sommet:

 describe('some test', function(){ var value = 0; it('should pass a value', function(done){ value = 5; done(); }); it('and then double it', function(done){ console.log(value * 2); // 10 done(); }); });