我正在使用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
只是一个包含应用程序命名空间的变量。如果我在expect
和ns.busy.hide()
函数的_logoutSuccess
上放置了分数点,jasmine
会点击expect
,然后点击_logoutSuccess
因此spyOn
失败了。
正如我所说,代码正在运行,我只是想知道如何为它编写测试。我查看了jasmine
done()
函数,但我不确定如何在这种情况下使用它(或者即使它是一个解决方案)。
由于
答案 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();
});