2016-04-17 20 views
0

Ich versuche, ein JavaScript-Objekt mit Mocha mit Chai, Chai-as-versprochen, Sinon, Sinon-Chai und Sinon-wie versprochen (mit Bluebird) zu testen. HierWarten auf unwidersprochenes Versprechen mit Mocha

ist das Objekt im Test:

function Component(MyService) { 
    var model = this; 
    model.data = 1; 

    activate(); 

    function activate() { 
    MyService.get(0).then(function (result) { 
     model.data = result; 
    }); 
    } 
} 

und hier ist der Test:

describe("The object under test", function() { 
    var MyService, component; 

    beforeEach(function() { 
    MyService = { 
     get: sinon.stub() 
    }; 
    MyService.get 
     .withArgs(0) 
     .resolves(5); 
    var Component = require("path/to/component"); 
    component = new Component(MyService); 
    }); 

    it("should load data upon activation", function() { 
    component.data.should.equal(5); // But equals 1 
    }); 
}); 

Mein Problem ist, ich habe keinen Einfluß auf das Versprechen in der Komponente zu warten dafür, bevor Sie mit den in den Dokumenten von Mocha beschriebenen Wegen, sinon-wie-versprochen, überprüfen.

Wie kann ich diesen Test bestanden machen?

+0

Does 'component.data' zurückgeben, was in' Modell.data'? – yarons

+0

Ja, es ist gleich 1, der Anfangswert. – Mouz

Antwort

1

Sie das Versprechen von MyService.get als Eigenschaft der Komponente speichern könnte:

function Component(MyService) { 
    var model = this; 
    model.data = 1; 

    activate(); 

    function activate() { 
    model.servicePromise = MyService.get(0); 

    return model.servicePromise.then(function (result) { 
     model.data = result; 
    }); 
    } 
} 

Dann würden Sie einen Asynchron-Mokka-Test verwenden:

it("should load data upon activation", function (done) { 
    component.servicePromise.then(function() { 
     component.data.should.equal(5); 
     done(); 
    }); 
}); 
+1

Obwohl das den Trick machen würde, halte ich es nicht für sinnvoll, das Versprechen als eine Eigenschaft des Objekts zu haben, nur um es testen zu können. – Mouz

+0

Sie können dann entweder abfragen und mit Timeout auf Erfolg warten oder eine andere Zusage haben, die generischer wäre, etwas wie componentReadyPromise, an das Sie auch Ihren Handler anhängen könnten – vvondra

+0

Die Benennung der Eigenschaft zu etwas wie Aktivierung kann sinnvoll sein. – Mouz