我正在尝试监视 ajax 错误请求并收到以下错误。你能帮忙吗?
TypeError: e.error 不是函数
待测JS代码:
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
}
});
}
Jasmine 规范:
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);
});
});
谢谢。
最佳答案
我强烈建议不要尝试直接监视/ 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 范围将沿错误路径向下移动。然后,您可以测试您的成功
和错误
函数做正确的事情。
关于javascript - Jasmine - ajax spyon 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36126894/