0

我正在尝试使用 QUnit 和 jQuery Mockjax 测试一些与 AJAX 相关的代码,并且遇到了一个问题,即null当请求 contentType 被修改时,Mockjax 似乎总是返回。

工作的JS代码:

QUnit.asyncTest('$.ajax POST', function() {
    expect(1);
    $.mockjax({
        url: '/test',
        type: 'POST',
        responseText: {
            foo: 'bar'
        }
    });
    $.ajax({
        url: '/test',
        type: 'POST',
    })
    .done( function(data,textStatus,jqXHR) {
        deepEqual(data,{foo:'bar'},'Correct response');
        QUnit.start();
    });
});

但是,如果我这样在$.ajax请求中设置内容类型:

    $.ajax({
        url: '/test',
        type: 'POST',
        contentType: 'application/json',
    })

测试失败:

Expected:   
{
    "foo": "bar"
}
Result:     
    null

我在这里有一个jsfiddle 来演示这个问题。

我究竟做错了什么?或者这是一个错误,还是 JS 库之间的不兼容?

我正在使用 jquery 1.7.2、mockjax 1.5.3 和 QUnit 1.14.0。在 Chrome 和 Firefox 中观察到相同的行为。

注意:当然,在我的生产代码中,我也会在请求中发送 JSON 编码的数据,但出于演示的目的,我已将问题减少到我认为重现我的问题所需的最低限度。

4

1 回答 1

3

将 dataType: 'json' 添加到 $.ajax 调用有助于:

$.ajax({
    url: '/test',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json',
})

...但我不知道为什么...

于 2014-06-06T18:12:00.227 回答