0

nullQUnit と jQuery Mockjax を使用して AJAX 関連のコードをテストしようとしていますが、リクエストの 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 hereがあります。

私は何を間違っていますか?それとも、これはバグですか、それとも 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 に答える