使用jasmine测试放大js请求回调

时间:2014-10-27 01:42:32

标签: jasmine amplifyjs

我正在使用amplifyjs来处理AJAX请求。这工作正常。我正在使用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只是一个包含应用程序命名空间的变量。如果我在expectns.busy.hide()函数的_logoutSuccess上放置了分数点,jasmine会点击expect,然后点击_logoutSuccess因此spyOn失败了。

正如我所说,代码正在运行,我只是想知道如何为它编写测试。我查看了jasmine done()函数,但我不确定如何在这种情况下使用它(或者即使它是一个解决方案)。

由于

1 个答案:

答案 0 :(得分: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();
        });