1

使用 Qunit 和 MockJax,我试图进行两个测试,为了便于理解,在这里进行了简化。以下两个测试之一失败,可能是因为这两个测试并行运行,因此它们没有各自绕道$.ajax(). (唯一的区别是每个中的 responseText。)关于调整它以便以下两个测试通过的好方法的任何想法?

function testAjax() {
    return $.ajax({
        type: 'POST',
        dataType: 'json', 
        url: '/fakeservice/1',
        data: {'a':'b'}
    });
}

asyncTest("testAjax 1", function () {
    $.mockjax({
        url: '/fakeservice/1',
        type: 'POST',
        dataType: 'json',
        responseText: { 'name1': 'foo' }
    });

    testAjax().then(
        function (response) {
            deepEqual(response.name1, 'foo', "no name1");
            start();
        },
        function (error) {
            ok(false, "got AJAX error");
            start(); 
        }
    );
});


asyncTest("testAjax 2", function () {
    $.mockjax({
        url: '/fakeservice/1',
        type: 'POST',
        dataType: 'json',
        responseText: { 'name1': 'bar' }
    });

    testAjax().then(
        function (response) {
            deepEqual(response.name1, "bar", "no name1");
            start();
        },
        function (error) {
            ok(false, "got AJAX error");
            start();
        }
    );
});
4

1 回答 1

3

您必须$.mockjaxClear()在每次测试结束时调用(例如在teardown()您的模块的方法中)。这会破坏模拟并为下一次测试准备环境。

function testAjax() {
    return $.ajax({
        type: 'POST',
        dataType: 'json', 
        url: '/fakeservice/1',
        data: {'a':'b'}
    });
}

module("AJAX tests", {
    teardown: function() {
        $.mockjaxClear();
    }
});
asyncTest("testAjax 1", function () {
    $.mockjax({
        url: '/fakeservice/1',
        type: 'POST',
        dataType: 'json',
        responseText: { 'name1': 'foo' }
    });

    testAjax().then(
        function (response) {
            deepEqual(response.name1, 'foo', "no name1");
            start();
        },
        function (error) {
            ok(false, "got AJAX error");
            start();
        }
    );
});


asyncTest("testAjax 2", function () {
    $.mockjax({
        url: '/fakeservice/1',
        type: 'POST',
        dataType: 'json',
        responseText: { 'name1': 'bar' }
    });

    testAjax().then(
        function (response) {
            deepEqual(response.name1, "bar", "no name1");
            start();
        },
        function (error) {
            ok(false, "got AJAX error");
            start();
        }
    );

});

在 jsFiddle 上查看您改编的示例。

于 2013-02-12T17:01:21.090 回答