20

Jasmine でいくつかのテストを作成しようとしていますが、コードに非同期のコードがあると問題が発生しbeforeEachます。

サンプル コードは次のようになります。

describe("Jasmine", function() {

    var data ;

    beforeEach(function(){
        console.log('Before each');
        getSomeDataFromRemote(function(res){
            data = res;
        });
    });

    it("test1", function() {
        expect(data).toBe(something);
        console.log('Test finished');
    });

});

でわかるように、リモートからデータを取得して、非同期beforeEachに に割り当てます。data

しかし、test1私が確認しようとすると:

 expect(data).toBe(something);

はまだ終わっていないundefinedので、データはです。getSomeDataFromRemote

修正方法は?

4

3 に答える 3

25

内の非同期のものと同じように、 beforeEachでanditを使用できます。runswaitsFor

define( 'Jasmine' , function () {
    var data ;

    beforeEach(function(){
        runs( function () {
            getSomeDataFromRemote(function(res){
                data = res;
            });
        });

        waitsFor(function () { return !!data; } , 'Timed out', 1000);
    });

    it("test1", function() {
        runs( function () {
              expect(data).toBe(something);
        });
    });
});

これはテストコードだったからだと思いますが、実際にテストしているものなので、getSomeDataFromRemote内部で呼び出しを行う必要があると思います;)it

ここで非同期API 用に作成したいくつかのテストで、より大きな例をいくつか見ることができます。

于 2012-05-10T06:20:59.550 に答える
3

この場合、私は通常、非同期呼び出しをスタブして、すぐに応答します。

ご覧になったかどうかわかりませんが、Jasmine を使用した非同期テストに関するドキュメントを次に示します。

于 2012-05-10T05:04:06.923 に答える