Тесты Qunit не совпадают с фактическим выполнением плагина jQuery

Я начинаю писать тесты Qunit для своих существующих плагинов jQuery. Я прошел полдюжины тестов стиля конфигурации, чтобы убедиться, что все подключено правильно. Теперь приступаю к тестированию функциональности. Мой плагин представляет собой плагин в стиле обратного отсчета для текстовых полей. Вот реальная рабочая версия:

http://andymatthews.net/code/textCounter/

Я пишу тест, который проверяет, что количество, отображаемое под полем, является правильным значением. Например, если поле позволяет использовать 100 символов, а при загрузке страницы в поле содержится 20 символов, метка под полем должна иметь значение 80.

Вот что в qunit-fixture:

<div id="qunit-fixture">
    <textarea id="myTextarea">Existing content</textarea>
    <span id="theCounter"></span>
</div>

Вот соответствующий неудачный тест

test('setup', function(){
    console.log($('#theCounter'));
    equal($('#theCounter').text(), 124, 'count correctly initialized');
});

А вот и существующее содержимое плагина. Это еще не все, но я добавляю больше кода только по мере того, как существующие тесты проходят проверку.

(function($) {
    $.fn.textCounter = function(o){
        o = $.extend( {}, $.fn.textCounter.defaults, o );
        return this.each(function(i, el){
            var $e = $(el),
                $target = $(o.target);
            // predefined count minus existing content
            $e.html(o.count - $target.text().length);
            console.log( $e.html() );
        });
    }
    $.fn.textCounter.defaults = {
        count: 140,
        alertAt: 20,
        warnAt: 0,
        target: '#myTextarea',
        stopAtLimit: false
    }
}(jQuery));

Я предполагаю, что, поскольку я явно не настраиваю плагин на странице тестовой оснастки, плагин использует значения по умолчанию. Если это так, то счетчик должен начинаться с максимальных 140 символов минус 16 символов, уже находящихся в поле, и должен отображать 124.

Вот в чем проблема... когда запускается образец HTML-страницы, он правильно отображает 124. Когда тест запускается, он возвращает $('#theCounter').text() в виде пустой строки. При просмотре консоли после запуска пробной страницы И теста приведенный выше оператор журнала показывает 124. Но модульный тест показывает пустую строку.

Это не секрет, поэтому я могу предоставить все файлы, если это поможет. Я уверен, что это, вероятно, какая-то проблема с областью действия, но у меня недостаточно опыта работы с QUnit, чтобы понять, что не так.


person commadelimited    schedule 22.06.2012    source источник


Ответы (1)


Я не вижу никакого кода, вызывающего ваш плагин. Вы можете попробовать следующее...

test( "setup", function() {
    equal( 
        $( "#theCounter" ).textCounter().text(), 
        124, 
        "Count correctly initialized" 
    );
});

или вы можете создать модуль и сделать это на этапе установки

var textCounter;

module( "Setup", {
    setup: function() {
        textCounter = $( "#theCounter" ).textCounter();
    },
    teardown: function() {
    }
});

test( "setup", function() {
    equal( textCounter.text(), 124, "Count correctly initialized" );
});

Важно знать, что любая разметка в qunit-fixture будет сбрасываться для каждого теста.

person Elijah Manor    schedule 22.06.2012
comment
ДАААААААААМН! Это был Элайджа. Я предполагаю, что предположил (ошибочно), что QUnit автоматически запускает плагин, но это явно не так. Спасибо за вашу помощь. - person commadelimited; 22.06.2012