Тестовете на 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