2015-04-28 25 views
2

我有隱藏和顯示基於什麼工廠爲我提供了我的網頁上項目的功能:如何(而且應該)測試茉莉花中的UI元素可見性?

function toggleMenuItems(config) { 
     // hide all our elements first 
     $(".js-quickMenuElement").hide(); 

     config.data = config.data || []; 
     config.data.forEach(function (d) { 

      if (d === config.viewConfigCatalog.CalendarLink) { 
       $("#CalendarLink.js-quickMenuElement").show(); 
      } 

      if (d === config.viewConfigCatalog.ProductCreation) { 
       $("#ProductCreation.js-quickMenuElement").show(); 
      } 

      // etc etc etc 

     }); 

    }; 

我們已經使用茉莉花我們的JavaScript單元測試和我們討論我們是否應該測試此功能。 有人說我們不需要這樣做,因爲測試是將視圖耦合到javascript測試,但同時,如果不是jquery .show和.hide函數那些是包裝器或其他函數,我們會測試它們。

繼此之後,最好的測試方法是什麼? 製作一個接受字符串並在jQuery select中注入字符串名稱的包裝函數似乎是錯誤的。 我們認爲對是刺探另一種選擇($ .fn,「秀」),但只會讓我們測試,如果節目被稱爲的時間,而不是什麼隱藏的X量...

感謝,

回答

1

您可以使用jQuery來測試元素的可見性。

$(element).is(":visible");

code taken from a related question

當然做這個,你說你用耦合試驗的看法。你可以將決定這個函數結果的邏輯移動到一個單獨的函數中,然後測試那個函數的結果。

** 編輯 **

下面說明了我的意思就用KVP列表簡化,你可以寫上獲得來自KVP價值功能的測試。

var config = { 
 
    data: [], 
 
    viewConfigCatalog: { 
 
    CalendarLink: "CalendarLink", 
 
    ProductCreation: "ProductCreation", 
 
    } 
 
}; 
 

 
var kvp = [{ 
 
    name: config.viewConfigCatalog.CalendarLink, 
 
    value: "#CalendarLink.js-quickMenuElement" 
 
}, { 
 
    name: config.viewConfigCatalog.ProductCreation, 
 
    value: "#ProductCreation.js-quickMenuElement" 
 
}]; 
 

 
function getSelectorString(name) { 
 
    var i = kvp.length; 
 
    while (i--) { 
 
    var pair = kvp[i]; 
 
    if (pair.name === name) 
 
     return pair.value; 
 
    } 
 
    return null; 
 
} 
 

 
function toggleMenuItems(config) { 
 
    // hide all our elements first 
 
    $(".js-quickMenuElement").hide(); 
 

 
    config.data = config.data || []; 
 
    config.data.forEach(function(d) { 
 
    $(getSelectorString(d)).show(); 
 
    }); 
 

 
}; 
 

 
document.writeln(getSelectorString(config.viewConfigCatalog.CalendarLink)+'<br/>'); 
 
document.writeln(getSelectorString(config.viewConfigCatalog.ProductCreation)+'<br/>'); 
 
document.writeln(getSelectorString("hi"));

+0

DOM不會在茉莉測試存在的,所以。是(「:可見」)是不是我可以甚至想要做的事情。 問題的確是我們是否應該測試這個功能。移動邏輯將工作,但你仍然耦合視圖與測試,因爲你會傳遞jQuery選擇器字符串... – LanFeusT

+0

什麼引發了你是否應該測試這個代碼的問題?通過使用「config.viewConfigCatalog」值的鍵值對列表作爲鍵,並選擇字符串作爲值,可以簡化一點。然後你可以測試這個功能。此後您必須確保您的KVP列表是正確的。 – Chris

+0

我們不想讓測試與視圖耦合,這是開始測試與否的問題,但我喜歡您的解決方案。謝謝! – LanFeusT