Не могу пройти все юнит-тесты jQuery 1.4.2 Ajax с моим плагином - PullRequest
2 голосов
/ 06 августа 2010

Я создал плагин, который ударил кулаком функцию jQuery Ajax. Одна проблема, которую я не могу обнаружить при запуске модульных тестов Ajax для 1.4.2. Он не пройдет два теста

  1. Ajax-события с контекстом
  2. Изменение контекста jQuery.ajax

Test one есть тест, который всегда терпит неудачу:

 function callback(msg){
  return function(){
   equals( this, context, "context is preserved on callback " + msg );
  };
 }

Ссылка this вместо тега <div/> становится XPC Cross Origin Wrapper.

Мой исходный код находится здесь:

Мои модульные тесты для плагина можно запустить здесь:

Сбои модульных тестов можно запустить здесь:

Следует отметить, что jQuery 1.4.2 Ajax не обрабатывает ответ сервера 301 с FireFox 3.6.8. Он будет возвращен как 0. Я изменил мою библиотеку jQuery, чтобы учесть это.

Также немного времени секундомера JSONP. Ошибка # 5383 .

И, возможно, некоторые проблемы с презентацией, и этот плагин будет готов к использованию.

Любая помощь будет оценена. в том числе дизайн. Заранее спасибо.

1 Ответ

5 голосов
/ 08 августа 2010

Проблема в том, что вы теряете контекст в ваших service.monitor методах при вызове первоначально переданных обработчиков success, error, beforeSend и complete.

Взгляните на ajaxMonitor.service.js, вам нужно заменить каждый из исходных вызовов обработчика на .call(), чтобы поддерживать надлежащий контекст:

1) В service.monitorSuccess () :

origSuccess(data, textStatus, request);
//should be:
origSuccess.call(this, data, textStatus, request);

2) В service.monitorError () :

origError(request, status, errorThrown);
//should be:
origError.call(this, request, status, errorThrown);

3) В service.monitorBeforeSend () :

var abortEarly = origBeforeSend(request);
//should be:
var abortEarly = origBeforeSend.call(this, request);

4) В service.monitorComplete () :

var xhr = origComplete(request, status);
//should be:
var xhr = origComplete.call(this, request, status);

Я скопировал вашу настройку теста здесь, чтобы вы могли увидеть результаты: http://ncraver.com/AjaxTest/

Обратите внимание, что некоторые другие тесты не выполняются ... они не связаны с моими изменениями, это результат того, что мой сайт не работает с PHP, поэтому тесты получают неправильный ответ от этих .php страницы:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...