我的.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");
});
我能够通过存根/模拟数据为$ .ajax调用编写单元测试用例,但是无法为.done和.fail方法编写测试用例。无论如何都要为.done和.fail方法编写规范。
答案 0 :(得分:2)
以下是我如何略微修改您的问题以适应模拟行为。查看行动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();
});
});
答案 1 :(得分:0)
要编写.done
和.fail
方法的测试用例,您需要在Spy
JQuery函数上创建$.ajax
,并调用您自己的假函数Deferred
对象并解决/拒绝它取决于您的测试。例如,您的代码可能看起来像......
// successful case
spyOn($, "ajax").and.callFake(function () {
return $.Deferred().resolve(expected_data, expected_status).promise();
});
// failure case
spyOn($, "ajax").and.callFake(function () {
return $.Deferred().reject(expected_status, expected_error).promise();
});