0

ジャスミンの単体テストを始めたばかりで、非同期呼び出しのテストで問題が発生しています。

テストしようとしている ajax 呼び出しがあり、コンソールで試してみたので、希望どおりに動作することがわかりました。コンソールで行ったのと同じことをテストしていると思いますが、間違っている可能性があります。

コンソールは次のとおりです。

> mg = new MandellMVC()
MandellMVC {getSessionId: function, setSessionId: function, isValidGetFunction: function, getURLPrefix: function, setURLPrefix: function…}
> mg.setUseLocalData(true);
true
> var log = new Log(73936780)
undefined
> log.setLogType('Proc')
true
> log.fetch(mg, function(){console.log('done');})
true
done

set local data は、http リクエストを外部サーバーに送信するか、ローカル ファイルからデータをロードするかの間で変更されるだけです。

ジャスミンのテスト コードは次のとおりです。

describe("Log Model", function() {

    var mg = new MandellMVC();
    mg.setUseLocalData(true);

    var log;

    beforeEach(function() {
        log = new Log(73936780);
    });

    describe("function fetch", function() {
         it("returns false if log type is invalid", function() {
            expect(log.fetch(mg, function(){})).toBeFalsy();
        });

        // Not sure why this needs to be here too?
        log = new Log(73936780);
        log.setLogType('Proc');

        it("should make a real ajax request", function() {
            var callback = jasmine.createSpy();
            log.fetch(mg, callback);
            waitsFor(function() {
                return callback.callCount > 0;
            });
            runs(function() {
                expect(callback).toHaveBeenCalled();
            });
        });
    });
});

最初のテストはパスします。しかし、2番目のものはエラーを出しますtimeout: timed out after 5000 msec waiting for something to happen。チュートリアルに従おうとしましたが、明らかにうまくいきませんでした。

ありがとう、どんな助けでも大歓迎です!

4

1 に答える 1

1

私はあなたが宣言を混同していると思いますlog = new Log(73936780)

正しいコードは

describe("Log Model", function() {
    var mg;
    var log;

    beforeEach(function() {
        mg = new MandellMVC();
        mg.setUseLocalData(true);

        log = new Log(73936780);
        log.setLogType('Proc');
    });

    afterEach(function() {
        delete mg;
        delete log;
    });

    describe("function fetch", function() {
        it("returns false if log type is invalid", function() {
            expect(log.fetch(mg, function(){})).toBeFalsy();
        });

        it("should make a real ajax request", function() {
            var callback = jasmine.createSpy();
            log.fetch(mg, callback);
            waitsFor(function() {
                return callback.callCount > 0;
            });
            runs(function() {
                expect(callback).toHaveBeenCalled();
            });
        });
    });
});

さらに、リクエストが送信され、レスポンスが正しく受信された場合は、firebug もチェックする必要があります。

于 2013-05-29T20:35:47.130 に答える