2010-12-03 5 views
1

Je travaille sur un système très léger pour tester un framework javascript que je construis pour le travail.javascript gestion des événements

J'ai créé une fonction de test qui fait office de wrapper en invoquant la fonction que je suis en train de tester dans un try/catch pour signaler un feedback sans interrompre mon cycle de test. Le problème est que mon catch n'est pas appelé quand je crée délibérément une erreur.

Mon code ....

/// <summary> 
    ///  Acts as a wrapper to allow us to perform and report the result 
    ///  of each individual 
    ///  test without blocking further tests. 
    /// </summary> 
    /// <param name="selector" type="String"> 
    ///  The id jQuery selector e.g #versionTests to repot feedback to. 
    /// </param> 
    /// <param name="testFunction" type="Function"> 
    ///  The test function to call. 
    /// </param> 
    test: function (selector, testFunction) { 

     try { 
      // now we are calling our own callback function 
      if (typeof testFunction === 'function') { 

       testFunction.call(); 
      } 
     } catch (e) { 

     jQuery(selector).addClass("error").append("<p>" + e.description + "</p>"); 

     } 

    } 

Merci à l'avance ....

EDIT .. Ajouté appelé le code pour plus de clarté.

La fonction de test que je fais appel est essentiellement sur qui appelle cette ....

testEqualizeHeight: function() { 

     PeachUI("div.heightTest").equalizeHeight(); 
    } 

Ce qui appelle cette ....... (this.selector est une propriété qui reflète sélecteur de jQuerys.) Notez la '$' manquante sur $selector.height(tallest);

equalizeHeight: function() { 
    /// <summary> 
    ///  Equalizes the height of the specified element(s). 
    /// </summary> 

    var $tallest = 0, $selector = this.selector; 

    $selector.each(function() { 

     var $height = jQuery(this).height(); 

     if ($height > $tallest) { 

      $tallest = $height; 
     } 
    }); 

    // ie6 height is the same as min-height for other browsers. 
    if (PeachUI.browser.ie6) { 

     $selector.height(tallest); 

    } else { 

     $selector.css("min-height", $tallest); 
    } 
} 
+0

Pouvez-vous poster le code qui est censé créer l'erreur? – cambraca

Répondre

2

Lorsque vous dans votre source code il me semble que vous faites cette chose remarquable (dernières lignes):

PeachTest.test("#versionTests", PeachTest.testVersion()); 
PeachTest.test("#browserTests", PeachTest.testBrowser()); 
PeachTest.test("#isNumericTests", PeachTest.testNumeric); 
PeachTest.test("#heightTests", PeachTest.testEqualizeHeight()); 

Ici vous passer une référence à PeachTest.testNumeric-PeachTest.test, mais vous appelez les trois autres fonctions de test et transmettez les valeurs que ces fonctions renvoient à PeachTest.test.

Supprimez les opérateurs d'appel de fonction (()) derrière ces paramètres et votre fonction de test fonctionne comme prévu.

+0

Je ne peux pas croire que j'étais si stupide! Merci beaucoup! :) –

+0

@James - Hehe, de rien! –

0

soit testFunction n'est pas appelé (il est enveloppé dans un conditionnel) ou votre code pour ajouter l'erreur est incorrect.

Je voudrais utiliser un débogueur pour suivre l'exécution du test et vérifier qu'il suit le chemin que vous pensez être. Ou console.logs()

+0

@ hvgotcodes: testfunction est définitivement appelé lorsqu'il s'exécute lorsque je supprime l'erreur. –

2

Vous n'avez pas besoin d'appeler .call(). Vous pouvez simplement utiliser:

testFunction(); 

si vous voulez configurer le contexte d'exécution explicitement, vous pouvez utiliser .call(context, param1, param2, ..)

Comment avez-vous « délibérément » créer une erreur? Essayez de lancer une exception dans testFunction comme

throw new Error('Foo Bar'); 

La dernière chose à mentionner ici est que le exception object ne possède pas la propriété description mais message.

Exemple: http://www.jsfiddle.net/RUeEm/

+0

@ jAndy: Vous pouvez blâmer w3schools pour la propriété de description. http://www.w3schools.com/js/js_try_catch.asp Je n'avais pas réalisé que c'était une chose de MS seulement. –

+0

@James: W3Schools est ** plein ** d'erreurs, de mauvaises pratiques de codage, d'exemples horribles, etc. Et sachez que W3Schools n'est pas du tout affilié au W3C. Pour un meilleur guide, voir [MDC] (https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/Error#Properties_2) (et vous pouvez y lire que 'description' est une propriété propriétaire). –

+0

@JamesSouth: Je ne blâme personne. Je voulais juste le signaler :) – jAndy

Questions connexes