我的 .js 文件中有以下 ajax 调用代码,我想编写 jasmine 单元测试来实现覆盖。
var promise = $.ajax({
url: URL,
type: 'GET'
});
promise.done(function(data, status) {
console.log("success");
});
promise.fail(function(status, error) {
console.log("error");
});
我能够通过 stub /模拟数据为 $.ajax 调用编写单元测试用例,但无法为 .done 和 .fail 方法编写测试用例。是否有为 .done 和 .fail 方法编写规范。
最佳答案
- 您可以从成功/失败处理程序中调用其他函数来有效模拟 Promise 处理程序。
- 除了使代码易于阅读之外,还有助于调试和模拟
- Slava Ivanov 的答案可帮助您 stub 适当的回调,它使用 Jquery Deferred对象
以下是我如何稍微修改您的问题以适应模拟行为。查看实际操作 here
var handler = {
success: function(data) {
console.log("success");
},
fail: function(data) {
console.log("error");
}
};
var testObj = {
ajaxFunction: function() {
var promise =
$.ajax({
url: 'abc',
type: 'GET'
});
promise.done(function(data, status) {
handler.success(data);
});
promise.fail(function(status, error) {
handler.fail(error);
});
}
};
describe('test ajax', function() {
it('test success', function() {
spyOn(handler, 'success').and.callFake(function(e) {
console.log("This is a spy call for success handler");
});
spyOn($, 'ajax').and.callFake(function(e) {
return $.Deferred().resolve({
'hurray': 'success'
}).promise();
});
testObj.ajaxFunction();
expect(handler.success).toHaveBeenCalled();
});
it('test failure', function() {
spyOn(handler, 'fail').and.callFake(function(e) {
console.log("This is a spy call for fail handler");
});
spyOn($, 'ajax').and.callFake(function(e) {
return $.Deferred().reject({
'alas': 'failure'
}).promise();
});
testObj.ajaxFunction();
expect(handler.fail).toHaveBeenCalled();
});
});
关于javascript - 如何使用 jasmine 对 jquery ajax 调用进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44747425/