2012-06-22 60 views
3

我開始爲我現有的jQuery插件編寫Qunit測試。我已經完成了六次配置風格測試,以確保一切正常。現在我開始測試功能。我的插件是textarea字段的倒計時插件。下面是實際工作的版本:Qunit測試與實際的jQuery插件執行不匹配

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

我正在寫一個測試,檢查該字段下顯示的計數是正確的值。例如,如果一個字段允許100個字符,20個字符都在外地頁面加載時,場下的標籤應改爲80

這裏的什麼在qunit夾具:

<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有什麼問題。

回答

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用於將被重置是非常重要的每個測試。

+0

DAAAAAAAAAAMN!這就是以利亞。我想我假設(錯誤地)QUnit自動運行插件,但這顯然不是真的。謝謝你的幫助。 – commadelimited