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只是一个保存应用程序命名空间的变量。如果我在函数中的expectand 上放置断点,点击 the然后点击 the ,因此失败。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 回答