我试图窥探ajax错误请求并得到以下错误。你能帮忙吗?
TypeError:e.error不是函数
function postSettings() {
$.ajax(
{
type: "POST",
url: EndPoints.Setup,
data: frm_data,
success: function (successData) {
///// code is getting covered
},
error: function (errorData) {
///// code is not getting covered
}
});
}
describe("Call Success path", function () {
var ajaxSpy;
beforeEach(function () {
var MockEndPoints = global.EndPoints = {};
MockEndPoints.SnmpSetup = "/mock/test/setup";
ajaxSpy = spyOn($, "ajax").and.callFake(function (e) {
e.success(globalFakeData);
});
});
it("Should populate settings", function () {
Setup.postSettings();
expect($.ajax).toHaveBeenCalledTimes(2);
});
});
describe("Call Error path", function () {
var ajaxSpy;
beforeEach(function () {
var MockEndPoints = global.EndPoints = {};
MockEndPoints.SnmpSetup = "/mock/test/setup";
ajaxSpy = spyOn($, "ajax").and.callFake(function (e) {
**e.error; // No error but the path is not covered**
**e.error(globalFakeData); // throws the above error**
});
});
it("Should populate settings", function () {
Setup.postSettings();
expect($.ajax).toHaveBeenCalledTimes(1);
});
});
感谢。
答案 0 :(得分:3)
我强烈建议您不要直接监视/ stub $.ajax
方法,而是使用jasmine-ajax库。
在beforeEach
执行:jasmine.Ajax.install()
。
运行您的测试代码,您可以检查已使用var request = jasmine.Ajax.requests.mostRecent()
进行(并拦截)ajax请求。然后,您可以检查请求属性,例如url
,method
,data()
。
要模拟请求成功和失败,请使用request.respondWith
并传入status
代码和responseText
正文。 200状态将模拟成功; 4xx或5xx范围将沿着错误路径向下移动。然后,您可以测试success
和error
函数做正确的事情。