在请求中指定contentType时,Mockjax不工作

时间:2014-06-06 02:39:18

标签: jquery qunit mockjax

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

正在运行的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 here来证明这个问题。

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

我使用的是jquery 1.7.2,mockjax 1.5.3和QUnit 1.14.0。在Chrome和Firefox中也会出现相同的行为。

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

1 个答案:

答案 0 :(得分:3)

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

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

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