Конечные пробелы в ответе Ajax - PullRequest
1 голос
/ 20 ноября 2010

Я пытаюсь использовать Qunit для тестирования некоторого кода, но у меня есть некоторые проблемы с вызовами Ajax. Я даже не могу заставить их тестировать правильно с помощью простейшего вызова Ajax с использованием методов jQuery. Проблемы заключаются в том, что к 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", diff: "foo""foo"

Затем я попробовал следующее:

  • Я протестировал против "foo" (включая завершающий пробел)
  • Я сделал response.replace(' ', '') перед тестированием
  • Я изменил кодировку шрифта файла ajax.txt
  • Я тестировал его как в Firefox, так и в Chrome, каждый раз чистя кеш
  • Я вручную проверил на равенство внутри оповещения даже при == сравнении

но ни в коем случае я не смог получить совпадение. Например, в первом варианте я получил загадочный ответ

Ajax-вызовы работают правильно, ожидаемый результат: "foo": "foo", diff: "foo"

Теперь я немного схожу с ума. Что я мог сделать неправильно?

Ответы [ 2 ]

4 голосов
/ 20 ноября 2010

Вы можете $.trim() (обрезать jQuery, поскольку IE <9 не имеет его изначально) результат, например: </p>

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

Почему это происходит? Вероятно, это ошибка форматирования, например Unix против оконечных строк Windows, которые накапливаются там на вас.

0 голосов
/ 17 декабря 2010

У меня были похожие - да, вполне возможно, окончания строк;Я должен был удалить "\ r" и "\ n", чтобы убедиться, что это работает.Другой способ получить то, что вы ожидаете, это использовать JSON.Получить вызов AJAX для возврата (например)

{ "Text":"foo" }

Затем выполнить тестирование следующим образом:

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

Вам необходимо установить тип возврата AJAX на json в вызове jQuery AJAX.

...