我正在尝试调试一些测试 - 我有以下代码:
test('Can get the test Side',
function () {
stop();
debugger;
var result = getTestSide();
debugger;
changeTestSide(result);
}
);
// Step 1: Get test side
function getTestSide() {
$.ajax({
type: 'GET',
url: urlWithId,
success: function (result) {
return "test success";
debugger;
ok(true, "GET succeeded.");
if (!result.SideId === testSideId) {
throw "GET result does not equal testSideId";
} else {
ok(true, "Returned key matches testSide Id.");
return result;
}
},
error: function (result) {
return "test failure";
debugger;
throw "Error";
}
});
};
无论如何,top方法中的“结果”始终是未定义的。为什么是这样?无论getTestSide成功还是失败,我都会返回一个字符串。
答案 0 :(得分:0)
您应该从changeTestSide
和success
处理程序中调用error
方法
答案 1 :(得分:0)
你需要在这里解决一些问题:
success: function (result) {
return "test success";
debugger;
ok(true, "GET succeeded.");
if (!result.SideId === testSideId) {
throw "GET result does not equal testSideId";
} else {
ok(true, "Returned key matches testSide Id.");
return result;
}
},
首先,您需要从AJAX中的changeTestSide(result);
函数调用success
。这是因为AJAX默认是异步调用,这意味着您的javascript在继续getTestSide()
函数之前不会等待test
完成执行。其次,在你的success
函数中,你要做的第一件事是return "test success";
,它将使函数返回,并且下面没有任何代码实际上正在运行。以下是代码需要的更好示例:
success: function (result) {
debugger;
ok(true, "GET succeeded.");
if (!result.SideId === testSideId) {
throw "GET result does not equal testSideId";
} else {
ok(true, "Returned key matches testSide Id.");
changeTestSide(result);
}
},
答案 2 :(得分:0)
在嵌套return
中使用function
仅从该函数返回。您的代码结构必须完全不同,以获得您想要的效果。一种方法是将回调函数传递给将处理响应的getTestSide
,如下所示:
test('Can get the test Side',
function () {
stop();
debugger;
getTestSide(function (result) {
changeTestSide(result);
});
}
);
// Step 1: Get test side
function getTestSide(cb) {
$.ajax({
type: 'GET',
url: urlWithId,
success: function (result) {
// removed this because it stops the rest from running
// return "test success";
ok(true, "GET succeeded.");
if (!result.SideId === testSideId) {
throw "GET result does not equal testSideId";
} else {
ok(true, "Returned key matches testSide Id.");
// Call the callback instead of returning.
cb(result);
}
},
error: function (result) {
// removed this because it stops the rest from running
// return "test failure";
debugger;
throw "Error";
}
});
};
您还在成功和错误回调中使用了throw
;这些也不会做我认为你期望他们做的事情,因为当这些函数运行时你的测试函数已经返回,所以没有办法捕获这些异常。您的代码未显示任何尝试捕获异常,因此我没有尝试解决此问题,但您可以通过遵循与$.ajax
函数类似的模式并同时提供success
和然后调用者可以实现error
回调。