1

工作ajax调用代码如下

$('#callControllerBtn').click(function () {
    currentlySelectedRow = grid.select();
    sendProductIDToController(currentlySelectedRow);
});

function sendProductIDToController(currentlySelectedRow) {
    $.ajax({
        url: "Home/sendProductID/", // Home = Controller , sendProductID = Action
        data: {
            ID: pID
        },
        cache: false,
        type: "POST",
        timeout: 10000,
        dataType: "json",
        success: function (result) {
            if (result) {
                alert("Successfully Completed");
                grid.removeRow(currentlySelectedRow);
                editor.value("");
            } else {
                alert("Failed");
            }
        }
    });
}

现在我想编写相同的代码,但使用 JS 测试方法。我在 vs 2010 中使用 QUnit、ChutzPah,让我看看模拟/假 ajax 调用的好做法是什么,也用测试方法实现工作代码。

4

2 回答 2

1

http://net.tutsplus.com/tutorials/javascript-ajax/how-to-test-your-javascript-code-with-qunit/

查看异步章节。

您可以在 $.ajax() 对象文字参数中使用 JQuery 夹具属性来指定应将 ajax 调用重新路由到的静态文件。这是 JMVC 文档中对固定装置的一个很好的解释:

http://javascriptmvc.com/docs.html#!jQuery.fixture

于 2013-01-29T18:23:53.393 回答
0

我知道这个问题很老,但我遇到了同样的问题,这就是我解决它的方法:

我劫持了 $.ajax 函数不进行调用:

var $.ajaxResults = [];

$.ajax = function(options) {
    $.ajaxResults.push(options);
}

根据具体情况,您可能需要一些更复杂的代码来捕获所有参数或其他任何东西。但在我的应用程序中,我总是使用 $.ajax(options)

然后,在测试中你可以这样做:

// the code below initializes the control and triggers an ajax call
$('#ddTest').dropdown();

// check if the ajax call was triggered
equal($.ajaxResults.length, 1, "there is one registered ajax call");

// ajax callback -> run the callback with fake data to populate the control
$.ajaxResults[0].success([
    { value: '1', label: 'one' },
    { value: '2', label: 'two' },
    { value: '3', label: 'three' }
]);

这样你就可以同时检查调用参数和回调函数

于 2014-11-19T14:10:29.490 回答