2014-02-19 11 views
7

Ich habe an einigen Mocha/Chai Tests gearbeitet, und ich habe immer noch keine gute Möglichkeit gefunden, meine Tests über viele verschiedene Möglichkeiten laufen zu lassen das 'es' testet und wiederholt sich. Das Problem ist, wenn ich Dutzende oder Hunderte von Tests habe, möchte ich nicht immer wieder dieselbe for-Schleife schreiben.Wie wiederhole ich Mocha Tests/Schleife

Gibt es eine elegantere Art, dies zu tun? Insbesondere eine, die alle Tests gleichzeitig mit unterschiedlichen Testparametern durchläuft?

describe('As a dealer, I determine how many cards have been dealt from the deck based on', function(){ 

    console.log(this); 

    beforeEach(function(){ 
    var deck = new Deck(); 
    var myDeck = deck.getCards(); 
    }); 


    it('the number of cards are left in the deck', function(){ 
     for(var i = 1; i<=52; i++){ 
     myDeck.dealCard(); 
     expect(myDeck.countDeck()).to.equal(52-i); 
     } 
    }); 

    it('the number of cards dealt from the deck', function(){ 
     expect(myDeck.countDealt()).to.equal(i); 
    }); 

    it('the sum of the cards dealt and the cards left in the deck', function(){ 
     expect(myDeck.countDeck() + myDeck.countDealt()).to.equal(52) 
    }); 

}); 

Antwort

11

I neezer-Lösung bei Loop Mocha tests? implementiert, die beinhaltet den gesamten Test in einem Verschluss setzen und es mit einer Schleife ausgeführt wird.

Bitte beachten Sie, dass die Schleife innerhalb der Funktion mit beforeEach() verwechselt wird, da sie 52 Mal pro Test ausgeführt wird. Das Platzieren von Elementen innerhalb der Funktion beforeEach() ist keine gute Idee, wenn diese Elemente dynamisch sind und nicht mehr als einmal pro Schleife ausgeführt werden sollen.

Der Code sieht so aus, und es scheint zu funktionieren.

var myDeck = new Deck(Card); 

function _Fn(val){ 

    describe('As a dealer, I determine how many cards have been dealt from the deck based on', function(){ 

     myDeck.dealCard(); 

     var cardCount = 0; 
     var dealtCount = 0; 

     cardCount = myDeck.countDeck(); 
     dealtCount = myDeck.countDealt(); 

     it('the number of cards are left in the deck', function(){ 
     expect(cardCount).to.equal(52-val); 
     }); 

     it('the number of cards dealt from the deck', function(){ 
     expect(dealtCount).to.equal(val); 
     }); 

     it('the sum of the cards dealt and the cards left in the deck', function(){ 
     expect(cardCount + dealtCount).to.equal(52); 
     }); 

    }); 

} 

for(var i = 1; i<=52; i++){ 
    _Fn(i); 
} 
Verwandte Themen