2016-05-24 9 views
1

Ich bin neu in JavaScript Test Frameworks. Ich würde gerne ein wenig optimieren, aber ich stoße auf einige Probleme. Das Projekt wird mit should.jsMocha/Should.js mit asynchrone Funktion

Hier ist die vereinfachte Version meiner ursprünglichen Testfälle:

describe('Simple', function() { 
    describe('Test', function() { 
    it('should do something', function(done) { 
     somePromise.then(function(data) { 
     data.should.above(100); 
     done(); 
     }); 
    } 

    it('should do something else but alike', function(done) { 
     somePromise.then(function(data) { 
     data.should.above(100); 
     done(); 
     }); 
    } 

    } 
}); 

Ich versuche, es so zu tun:

var testFunc = function(data) { 
    it('should do something', function(done) { 
     data.should.above(100); 
     done(); 
    }); 
} 

describe('Simple', function() { 
    describe('Test', function() { 
     somePromise.then(function(data) { 
     testFunc(data); 
     }); 

     somePromise.then(function(data) { 
     testFunc(data); 
     }); 
    } 
}); 

Das Versprechen ist asynchron, und Vielleicht ist das der Grund, warum meine "Optimierung" nicht funktioniert hat? Ich habe keine "fertig" Callback für describe Funktion in der Dokumentation gefunden.

Vielen Dank im Voraus! Jede Hilfe wird zu schätzen wissen!

Antwort

2

Ihr Beispiel funktioniert nicht since Mocha has finished registering test cases when your promise resolves.

das gleiche Versprechen mit verschiedenen Behauptungen Testen

ein einziges Versprechen Um zu testen, einige Behauptungen verwenden Sie müssen einfach nur das Versprechen zu Beginn der Tests erstellen und sie dann in den es Blöcke verwenden wie folgt aus:

Beachten Sie, dass der Aufruf nur einmal erfolgt, wenn das Versprechen von einem API-Aufruf zurückgegeben wird. The result is simply cached in the promise for the two test cases.

Dies nutzt auch die Tatsache, dass you can return promises from test cases statt einen Rückruf zu tun. Der Testfall wird dann fehlschlagen, wenn die Zusage abgelehnt wird oder wenn eine der Assertionen in den then() -Aufrufen fehlschlägt.

Testing verschiedene Versprechungen mit den gleichen Behauptungen

Unter der Annahme, dass Sie verschiedene Versprechungen mit den gleichen Behauptungen testen wollen könnten Sie eine Funktion testFunc übergeben, die das Versprechen getestet werden erstellt.

var testFunc = function(promiseFactory) { 
    it('should do something', function(done) { 
     promiseFactory().then(function(data) { 
      data.should.above(100); 
      done(); 
     }); 
    }); 
} 

describe('Simple', function() { 
    describe('Test', function() { 
     testFunc(function() { return createSomePromise(); }); 

     testFunc(function() { return createSomeOtherPromise(); }); 
    }); 
}); 

Das funktioniert seit Mocha der it Funktion sofort innerhalb des Blocks beschreiben ausgeführt wird. Die Versprechungen werden dann mit dem Callback promiseFactory erstellt, wenn die Testfälle tatsächlich ausgeführt werden.

Wie Sie können auch return promises from test cases Sie testFunc ändern kann eine Behauptung als ein Versprechen wie diese zurück:

var testFunc = function(promiseFactory) { 
    it('should do something', function() { 
     return promiseFactory().should.eventually.be.above(100); 
    }); 
} 
+0

Dank, es funktioniert. Aber könnte ich ein Versprechen mit verschiedenen Aussagen testen? – iplus26

+0

Ich habe versucht, die "it" -Funktion in meine Versprechen Funktionen zu wickeln, so dass ich asynchrone API in meinem Versprechen Funktionen nur einmal anfordern kann, aber andere Test – iplus26

+0

Ja natürlich tun. Versprechen macht das sehr einfach. Sie erstellen das Versprechen außerhalb Ihrer Testfälle und weisen es einer Variablen zu. Sie können dann das Versprechen in sich wie gewohnt blockieren. Ich habe meine Antwort mit einem Beispiel aktualisiert. –