1

我正在尝试使用Qunit来测试一些代码,但是我在使用 Ajax 调用时遇到了一些问题。我什至无法通过使用 jQuery 方法的最简单的 Ajax 调用来正确测试它们。问题似乎是,无论我做什么,文本响应都会附加一个尾随空格。

我的初始代码类似于

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” 结果:“foo”,差异:“foo”

我现在有点发疯了。我可能做错了什么?

4

2 回答 2

4

您可以$.trim()(jQuery 修剪,因为 IE<9 本身没有它)结果,如下所示:

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

为什么会这样?这可能是一个格式错误,例如 Unix 与 Windows 的行尾在你身上蔓延。

于 2010-11-20T10:32:05.273 回答
0

我有类似的 - 是的,很可能是行尾;我必须删除“\r”和“\n”以确保它正常工作。另一种获得预期结果的方法是使用 JSON。获取 AJAX 调用以返回(例如)

{ "Text":"foo" }

然后像这样测试:

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

您需要在 jQuery AJAX 调用中将 AJAX 返回类型设置为 json。

于 2010-12-17T09:52:06.827 回答