Mocha teste les fonctions asynchrones

createJob un wrapper de nœud pour interagir avec une API externe et éprouve de la difficulté à tester la méthode createJob asynchrone. Ci-dessous le code du cas de test:

 api_key = "test_0dc8d51e0acffcb1880e0f19c79b2f5b0cc" lob = require('../src/lob')(api_key) should = require("should") chai = require("chai") data = name: "test name" to: "Bob" from: "Alice" object1: "foo" object2: "bar" describe "Job", -> @timeout(50000) describe "create", -> it "should create a job with address_id", (done) -> lob.jobs.createJob data, (new_job) -> new_job.should.not.be.empty new_job['name'].should.equal(data['name']) done() 

modifier

Le code ci-dessus résout le problème

(Réponse en coffeescript. Si vous souhaitez convertir le café en js, utilisez http://coffeescript.org/ , cliquez sur l’onglet Essayez CoffeeScript.)

Si vous testez du code asynchrone, vous devrez utiliser le modèle done :

 describe "User", -> describe "#save()", -> it "should save without error", (done) -> user = new User("Luna") user.save done 

http://visionmedia.github.io/mocha/ sous “Code asynchrone”. On dirait que createJob retourne sur true, car le test parcourt le code pour envoyer le message, etc. en disant: “Oui, j’ai envoyé tout ce que vous avez demandé!”.

Je recommanderais l’article de Martin Fowler sur le test du code asynch js avec mocha: http://martinfowler.com/articles/asyncJS.html .

J’ai un morceau de code qui teste la récupération d’un utilisateur de la firebase database (en utilisant sinon pour le stubbing). Le code réel se connecte à la firebase database puis appelle onSuccess avec la configuration de l’utilisateur: onSuccess(config)

  describe 'Config', -> orgId = 'a' errorHandler = ((msg) -> (throw msg)) beforeEach -> readConfig = sinon.stub(sdl , 'getConfig') readConfig.callsArgOnWithAsync(2, configSource, JSON.parse(jsonConfig)) afterEach -> configSource.getConfig.restore() 

… plus tard

  configSource.getConfig('520bc323de4b6f7845543288', errorHandler, (config) -> config.should.not.be.null config.should.have.property('preferences') done() ) 

Ne considérez pas cela comme une réponse à l’opération, mais comme un bonus pour celui qui est marqué comme correct.

Juste pour compléter @jcollum answer voici la version Javascript de son code:

 describe('User', function(){ describe('#save()', function(){ it("should save without error", function(done){ var _user = new User("Moon"); _user.save; done(); }); }); }); 

C’est assez évident, mais certains débutants auraient peut-être besoin de cet addendum.