0

私はamplifyjsAJAXリクエストに使用しています。それはうまくいっています。私はjasmineコードをテストするために使用しています。成功とエラーのコールバックをテストする最善の方法は何だろうと思っています。の後にコールバックが実行されるため、私が書いた現在の単体テストは機能しませんjasmine expect。テスト中のコードは次のとおりです。

function logout() {
    ns.busy.show();

    amplify.request({
        resourceId: 'logout',
        success: _logoutSuccess
    });
};
function _logoutSuccess(response) {
    ns.busy.hide();
};

リクエストが返されたときに関数が呼び出されることを検証する単体テストは次のとおりです。

it('should hide busy when successful', function () {
            // arrange
            ns.busy = { show: function () { }, hide: function () { } };
            spyOn(ns.busy, 'hide');
            amplify.request.define('logout', function (settings) {
                settings.success({});
            });

            // act
            ns.accountLogoutViewModel.logout();

            // assert
            expect(ns.busy.hide).toHaveBeenCalled();
        });

注:nsは、アプリケーションの名前空間を保持する単なる変数です。関数のexpectと にns.busy.hide()ブレークポイントを配置すると、 にヒットし、次に にヒットするため、 は失敗します。_logoutSuccessjasmineexpect_logoutSuccessspyOn

私が言うように、コードは機能しています。そのためのテストを作成する方法を知りたいだけです。関数を調べましたがjasmine done()、この状況での使用方法がわかりません (または、それが解決策であっても)。

ありがとう

4

1 に答える 1

0

いつものことではありませんか、ようやく質問を投稿するようになると、すぐに答えが見つかります。jasmine done()関数を使用して合格するテストは次のとおりです。

it('should hide busy when successful', function (done) {
            // arrange
            ns.busy = { show: function () { }, hide: function () { } };
            spyOn(ns.busy, 'hide');
            amplify.request.define('logout', function (settings) {
                settings.success({});
                done();
            });

            // act
            ns.accountLogoutViewModel.logout();

            // assert
            expect(ns.busy.hide).toHaveBeenCalled();
        });
于 2014-10-27T01:49:22.463 に答える