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 beaucoup. Existe-t-il un moyen d'y arriver avec du moka?
Merci!
Il est de loin préférable de garder les tests isolés de sorte qu'un test ne dépende pas d'un calcul effectué dans un autre. Appelons le test qui devrait réussir un test de valeur A et le test qui devrait le faire tester B. Quelques questions à considérer:
Les tests A et B sont-ils vraiment deux tests différents? Sinon, ils pourraient être combinés.
Le test A est-il destiné à fournir au test B un dispositif de test? Si c'est le cas, le test A devrait devenir le rappel d'un appel before
ou beforeEach
. Vous passez essentiellement les données en les affectant à des 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 à condition de ne pas oublier quelque chose, il n'y a aucun moyen d'appeler describe
, it
ou le rappel done
pour transmettre des valeurs. La méthode ci-dessus est donc celle-ci.
Je suis très d'accord avec ce que Louis a dit, et ce sont les raisons pour lesquelles Mocha ne le soutient pas réellement. Pensez à la méthode asynchrone à laquelle vous avez fait référence; si votre premier test échoue, vous obtenez un échec en cascade sur les autres.
Votre seule façon de procéder est, comme vous le dites, de coller une variable en haut:
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();
});
});
Il est également possible d'ajouter à la combinaison ou à l'objet contextuel.
Dans cet exemple, il est ajouté à l'objet costume
describe('suit', function(){
before(() => {
this.suitData = 'suit';
});
beforeEach(() => {
this.testData = 'test';
});
it('test', done => {
console.log(this.suitData)// => suit
console.log(this.testData)// => test
})
});