1

Qunitを使用してコードをテストしようとしていますが、Ajax 呼び出しに問題があります。jQuery メソッドを使用した最も単純な Ajax 呼び出しで正しくテストすることさえできません。問題は、私が何をしても、末尾のスペースが textResponse に追加されることです。

私の最初のコードは次のようなものでした

asyncTest('Ajax calls', function() {
    expect(1);

    $.get('ajax.txt', {}, function(response) {
        equal(response, 'foo', 'Ajax calls work correctly');
    });

    setTimeout(function() {
        start();
    }, 600);
});

ajax.txtすべての文字を含むテキスト ファイルですfoo。このテストは失敗し、報告しています

Ajax 呼び出しは正常に機能します。予期される: "foo" 結果: "foo "、差分: "foo" "foo "

次に、次のことを試しました。

  • 「foo」(末尾のスペースを含む)に対してテストしました
  • 私はresponse.replace(' ', '')テストの前にやった
  • ajax.txt ファイルのフォント エンコーディングを変更しました
  • キャッシュを消去するたびに、FirefoxとChromeの両方でテストしました
  • == 比較を使用しても、アラート内の同等性を手動でテストしました

しかし、私は決して一致することができませんでした。たとえば、最初のバリアントでは、不可解な答えが得られました

Ajax 呼び出しは正常に機能します。予期される: "foo " result: "foo "、diff: "foo "

私は今、少し気が狂っています。私は何が間違っていたのでしょうか?

4

2 に答える 2

4

$.trim()次のように、結果を(IE <9にはネイティブにないため、jQueryトリム)できます。

equal($.trim(response), 'foo', 'Ajax calls work correctly');

なぜこれが起こっているのですか?これはおそらくフォーマット エラーです。たとえば、Unix と Windows の行末が忍び寄っています。

于 2010-11-20T10:32:05.273 に答える
0

私も似たようなものを持っていました-はい、おそらく行末です。確実に機能するように、「\r」と「\n」を削除する必要がありました。期待するものを取得するもう 1 つの方法は、JSON を使用することです。AJAX 呼び出しを取得して返す (例)

{ "Text":"foo" }

次に、次のようにテストします。

equal(response.Text, 'foo', 'Ajax calls work correctly');

jQuery AJAX 呼び出しで、AJAX の戻り値の型を json に設定する必要があります。

于 2010-12-17T09:52:06.827 に答える