2010-12-03 5 views
1

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

Я создал тестовую функцию, которая действует как оболочка, вызывающая функцию, которую я тестирую в try/catch, чтобы сообщать обратную связь, не нарушая мой тестовый цикл. Проблема в том, что мой улов не вызывается, когда я намеренно создаю ошибку.

Мой код ....

/// <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>"); 

     } 

    } 

Спасибо заранее ....

EDIT .. Добавлен называемый код для ясности.

Функция тест, который я звоню в основном на том, что называет это ....

testEqualizeHeight: function() { 

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

Который называет это ....... (this.selector это свойство, которое отражает селектор jQuerys.) обратите внимание, что не хватает '$' на $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

Можете ли вы опубликовать код, который должен создать ошибку? – cambraca 2010-12-03 17:24:13

ответ

2

При поиске в вашем source code это казалось мне, что вы делаете это замечательную вещь (последние строки):

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

Здесь вы передаете ссылку на PeachTest.testNumeric в PeachTest.test, но вы 'вызывает другие три тестовые функции и передает значения, возвращаемые этими функциями в PeachTest.test.

Удалите из этих параметров операторы вызова функций (()), и ваша тестовая функция работает должным образом.

0

либо функции теста не вызывался (он обернут в условном), или код, чтобы добавить ошибку неверен.

Я бы использовал отладчик для отслеживания выполнения теста и проверки того, что он соответствует следующему пути. Или console.logs()

+0

@ hvgotcodes: testfunction определенно получает вызов, когда он запускается, когда я удаляю ошибку. – 2010-12-03 17:28:15

2

На самом деле вам не нужно вызывать .call(). Вы можете просто использовать:

testFunction(); 

если вы хотите настроить контекст выполнения в явном виде, вы можете использовать .call(context, param1, param2, ..)

Как вы «намеренно» создать ошибку? Попробуйте бросить исключение в testFunction как

throw new Error('Foo Bar'); 

Последняя вещь, чтобы упомянуть здесь есть, что exception object не владеет свойством description но message.

Пример: http://www.jsfiddle.net/RUeEm/

+0

@ jAndy: Вы можете обвинить w3schools в свойстве описания. http://www.w3schools.com/js/js_try_catch.asp Я не понимал, что это только MS. – 2010-12-03 19:21:03

+0

@James: W3Schools является ** полным ** ошибок, плохой практики кодирования, ужасных примеров и т. Д. И имейте в виду, что W3Schools вовсе не связаны с W3C. Более подробное руководство см. В разделе [MDC] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Properties_2) (и вы можете прочитать там, что «описание» является собственностью). – 2010-12-03 22:34:29

Смежные вопросы