2012-12-26 43 views
2

回答: 根據SO以外的人的建議:將html放在視圖文件中,並將其注入到生產和testRunner頁面。問題解決了。下面JS測試亞軍html與生產html?

問題大膽

可以說我有,將一個元素50px的向左移動,當用戶點擊的方法。

負責這項功能是

function moveElemLeft($elem, iPxLeft){} 

在我的測試腳本,我有本質:

test("test moves function left via css", 1, function(){ 
    //get first elem in test fixture. 
    var $testFixture = $('#qunit-fixture').children().eq(0); 
    var beforeLeft = $testFixture.css('left'); 
    moveElemLeft($testFixture, 50); 
    var afterLeft = $testFixture.css('left'); 
    equal(beforeLeft-50, afterLeft); 
}); 

在我的TestRunner HTML,我會像

<head><script href="test.js" /></head> 
    <body> 
    <div id="qunit-fixture"> 
    <div id="testChild" class="absolute no-margins"> 
    </div></div> 
    </body> 

-----問題---- 我的函數在測試過程中運行正常的可能性很高,但在生產中不正確,因爲我在測試夾具中編寫的html顯然微不足道?使用與我的測試運行器html文件相同的生產HTML是不是更好?

但是要做到這一點,這將意味着在測試設置上,我將不得不將html從生產html文件複製到測試運行器文件中。這甚至有可能嗎?這裏最好的做法是什麼?

回答

0

在生產中使用與我的測試運行器html文件中相同的html會不會更好?

除了你的單元測試之外,測試它還是有用的。

我不會替換一個小型自包含測試,演示如果在預期輸入上運行此功能時,該功能的行爲與預期相同,

但是要做到這一點,這將意味着在測試設置,我將不得不從生產的HTML文件複製HTML到測試運行器文件。這甚至有可能嗎?這裏最好的做法是什麼?

在生產HTML上運行你的測試(或者說,在專門的測試服務器上單獨安裝它)。我會用Selenium之類的東西在瀏覽器(或瀏覽器集合)中測試整個頁面,而不會將測試代碼注入頁面本身。

+1

所以在哲學上,將html和js圖層分開處理。 JS測試測試js是否按預期工作,然後使用另一個測試套件(您建議使用selenium,或者[第二選擇]嵌入js測試代碼)以確保html能夠正確使用js。 –

+0

差不多。一個機械化的瀏覽器可以測試整個網站 - HTML,CSS,JS,服務器端代碼等。 – Quentin

+0

這聽起來像爭論只是使用硒來測試一切按預期工作,只打擾純js單元測試如果js是非常複雜的,並且你想要測試js邏輯按照你的意圖行事。 –