1

最近、私は最初の本格的なBackboneアプリのテストをいくつか実行しようとしています。これまでのところ通常のテストでは問題はありませんでしたが、非同期テストを設定しようとして立ち往生しています。

基本的に、無効な属性を持つモデルを保存しようとすると、サーバーAPIは500 HTTPコードエラーのページを返します。これにより、バックボーンで正しい「エラー」状態がトリガーされるかどうかを確認したいと思います。

私はこのようにテストを設定しようとしました:

asyncTest("Test save Model function", function(){
        expect(1);

        var user = new User({});

        var err_spy = this.spy();
        user.on('error',err_spy);         

        user.save(user,{error:function(){
            start();
            equal( err_spy.callCount, 1, "Callback 'error' called once");

        }});

    });

問題は、save関数のエラーコールバックがモデル内のエラーコールバックをオーバーライドすることです。したがって、それをトリガーする唯一の方法は、手動で行うことです。

user.trigger("error");

私の本番環境ではモデルの保存関数のエラーコールバックがないため、テストするのは正しい方法ではないと思いますが、一方で、テストを評価するためにajax応答を待つようにQunitに指示する方法がわかりませんアサーション。

誰かが私にそれを機能させる方法を提案できますか?ありがとうございました!

4

1 に答える 1

1

このような何かがトリックを行う必要があります。ここではメモリから移動しますが、sinon fakeサーバーを使用すると、すぐに500エラー状態を返し、その後、スパイされた関数を呼び出すことができます。server.respondWith(...)呼び出しを微調整する必要がある場合があります。

asyncTest("Test save Model function", function(){
            expect(1);

            var user = new User({});

            // Set up a fake 500 response.
            var server = sinon.fakeServer.create();
            server.respondWith(500, {}, "");

            // Create the error callback.
            var err_callback = function(){};

            var err_spy = sinon.spy(err_callback);         

            user.save(user, {error: err_callback});

            server.respond();

            equal( err_spy.callCount, 1, "Callback 'error' called once");

            server.restore();

        });
于 2012-08-21T06:07:21.283 に答える