2010-08-05 3 views
2

J'ai créé un plug-in qui permet de pointer la fonction jQuery Ajax. Un problème que je ne peux pas trouver lors de l'exécution des tests unitaires Ajax pour Il ne sera pas 1.4.2 passer les deux testsImpossible de passer tous les tests jQuery 1.4.2 Ajax Unit avec mon plug-in

  1. événements Ajax avec le contexte
  2. jQuery.ajax contexte modification

un test a un test qui échoue toujours:

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

la référence this au lieu d'être la balise <div/> devient une croix XPC origine W rappeur.

My Source Code is here:

My unit tests for the plug-in can be run here:

The failing unit tests can be run here:

Une note est que jQuery Ajax DOE ne 1.4.2 gérer une réponse du serveur de 301 avec FireFox 3.6.8. Il sera retourné à 0. J'ai modifié ma bibliothèque jQuery pour en tenir compte.

De même, certaines temporisations de chronométrage JSONP. BUG #5383.

Et peut-être quelques problèmes de présentation et ce plug-in sera prêt pour le sauvage.

Toute aide serait appréciée. y compris le design. Merci d'avance.

+0

@Ken -Merci pour le formatage du code – Gutzofter

+2

à 'localhost', pourquoi essayez-vous de les héberger sur ma machine?!? –

+0

Votre machine! Je n'ai pas besoin de machine à coller. LOL! – Gutzofter

Répondre

5

Le problème est que vous perdez contexte dans vos méthodes service.monitor lorsque vous appelez les initialement transmises success, error, beforeSend et complete gestionnaires.

Jetez un oeil à ajaxMonitor.service.js, vous devez remplacer chacun des invocations de gestionnaire d'origine avec un .call() pour maintenir le contexte:

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) Dans service.monitorComplete():

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

j'ai copié votre configuration de test ici afin que vous puissiez voir les résultats: http://ncraver.com/AjaxTest/

Notez quelques autre tests échouent ...ceux-ci sont sans rapport avec mes changements, ils sont le résultat de mon site ne pas PHP, donc les tests obtiennent une réponse incorrecte de ces .php pages :)

+0

chemin à parcourir. Bon sang, j'étais presque là. vous pouvez le voir dans mon code quand j'appelle l'Ajax original. Très bon appel. Je suis redevable à vous vaut chaque point de prime. Maintenant, je dois transmettre cela à mon moqueur. – Gutzofter

+0

comme note complémentaire Je me demandais si vous pouviez me transmettre des critiques sur le code et l'outil lui-même. la rétroaction est très importante. Peut-être que je devrais utiliser SO pour obtenir les commentaires. Il peut être subjectif peut-être quelque chose comme ça peut aller dans la zone 51? – Gutzofter

+0

@Gutzofter - Je ne suis pas sûr de ce que le bon site est, pour moi les outils ont l'air très bien, mais comme un avertissement: je ne suis pas un * énorme * gars TDD (généralement un manque de temps de développement de ajuster/faites-le bien, malheureusement). J'enlèverais la balise 'jquery-plugins' de cette question et la remplacerais par' javascript', ce qui devrait attirer davantage l'attention, car le TDD est globalement plus une affaire JavaScript que jQuery, certains de ces gars pourraient être capable de partager quelques pensées supplémentaires. Donne aussi un lien vers '@ jquery' sur twitter quand tu seras prêt, l'équipe va probablement y jeter un coup d'œil :) –

Questions connexes