0

我正在尝试调试一些测试 - 我有以下代码:

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 成功还是失败,我都会返回一个字符串。

4

3 回答 3

0

changeTestSide您应该从successanderror处理程序调用方法

于 2013-03-17T18:49:00.480 回答
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;
    }
},

首先,您需要changeTestSide(result);successAJAX 中的函数调用。这是因为 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);
    }
},
于 2013-03-17T18:51:20.713 回答
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

于 2013-03-17T18:52:44.950 回答