2016-04-17 16 views
0

私は、チャイ、約束された、サイオン、サイオンチャイ、約束通りの(ブルーバードの)約束を使って、モカを使ってJavaScriptオブジェクトをテストしようとしています。ここでMochaとの約束を待つ

は、テスト対象のオブジェクトです:

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

    activate(); 

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

、ここではテストです:

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 
    }); 
}); 

私の問題は、私は待つためにコンポーネントで使用される約束のホールドを持っていないですそれは、約束されたようにモカの書に記載されている方法で確認する前に、

このテストに合格するにはどうすればよいですか?

+0

は ''に何があるかを返すcomponent.data'んmodel.data'? – yarons

+0

はい、初期値は1です。 – Mouz

答えて

1

あなたは、コンポーネントのプロパティとしてMyService.getから約束を格納することができ:

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; 
    }); 
    } 
} 

その後、あなたは非同期モカテストを使用します。

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

それはトリックを行うだろうが、私はそれをテストすることができるオブジェクトのプロパティとして約束を持つことは意味がないと思う。 – Mouz

+0

それから、成功のためにタイムアウトしてポーリングしたり、待っていたり、より汎用的な、約束どおりのものを用意することができます。例えば、componentReadyPromiseのようなハンドラをアタッチすることもできます。 – vvondra

+0

プロパティの名前を付けることは意味があります。 – Mouz

関連する問題