2016-03-22 14 views
1

Ich versuche, ein Stück Code zu testen, schrieb ich mit Bluebird verspricht, mit Chai-as-versprochen.Chai-as-Versprochen - scheint nicht mit Bluebird Versprechen zu arbeiten

Meine Methode gibt, ein Versprechen Ablehnung getestet werden, wie folgt:

/** 
    * Creates a new user entry in the database. 
    * @param {JSONObject} userData -- User details for creation. 
    * @return => {boolean} true if succefully created, false otherwise. 
    **/ 
    createUser: function(userData) { 
    return Promise.reject(); 
    }, 

Der Code Test, da dies:

describe('User creation test suite', function() { 
     it('Should successfully create root user', function(done) { 
      expect(users.createUser(sampleUsers.raam)) 
       .to.eventually.have.property('id').and.notify(done); 
      //expect(Promise.resolve({foo:'bar'})).to.eventually.have.property('id').and.notify(done); 
     }); 

Eventhough wird das Verfahren absichtlich Fehler, aber der Testfall ist als bestanden gekennzeichnet werden. Hier ist die Ausgabe.

Benutzererstellung Testsuite

✓ Should successfully create root user 

Wenn ich mit einem fest codierten String direkt testen wie

expect(Promise.resolve({foo:'bar'})).to.eventually.have.property('id').and.notify(done); 

Dann scheint es zu funktionieren. Was mache ich hier falsch?

EDIT Ich fand, dass es nichts mit bluebird Versprechungen oder meiner Methode hatte, die im Test ist. Eine einfache hardcoded Ablehnung funktioniert auch nicht richtig. Das ist ...,

expect(Promise.reject({foo:'bar'})).to.eventually.have.property('id').and.notify(done) 

kehrt als bestanden zurück, anstatt zu versagen. Mache ich hier etwas schrecklich falsch?

+0

ich die folgende Version von chai utils bin mit: "devDependencies": { "chai": "^ 3.5.0", "chai-as-versprochene": "^ 5.2.0", "chai-http": "^ 2.0.1" }, –

+0

Nach ein wenig mehr graben, verstehe ich, ich rufe fertig ohne Fehler. Wie kann ich dem ausgeführten Rückruf sagen, dass dieses Versprechen abgelehnt wurde? –

Antwort

0

Wenn Sie einen Callback an Ihren Mocha-Test übergeben und ihn dann aufrufen, wenn die Ausführung beendet ist - wie Sie es mit dem Rückruf done tun - ist dies nur eine Möglichkeit, mit asynchronous code in Mocha umzugehen. Eine weitere Möglichkeit besteht darin, einfach ein Versprechen aus Ihrem Test zurückzugeben, das Sie von chai-as-promised erhalten können. Versuchen Sie Modifizieren Sie testen, wie so:

it('Should successfully create root user', function() { 
    return expect(users.createUser(sampleUsers.raam)).to.eventually.have.property('id'); 
});