Używam wzorca modułu w Javascript, aby oddzielić mój publiczny interfejs od prywatnej implementacji. Aby uprościć to, co robię, mój kod generuje wykres. Wykres składa się z wielu części (osiach, etykiety, działki, legenda, itp) Mój kod wygląda następująco:Testowanie funkcji prywatnych w javascript
var Graph = function() {
var private_data;
function draw_legend() { ... }
function draw_plot() { ... }
function helper_func() { ... }
...
return {
add_data: function(data) {
private_data = data;
},
draw: function() {
draw_legend()
draw_plot()
}
}
}
Niektórzy ludzie opowiadają testowania tylko interfejs publiczny swoimi klasami, co ma sens, ale ja Naprawdę lubię wchodzić w niektóre testy, aby przetestować każdy z komponentów osobno. Jeśli zepsuje moją funkcję draw_legend(), chciałbym, aby ten test się nie powiódł, a nie test dla publicznej funkcji draw(). Czy jestem tutaj na niewłaściwym torze?
Potrafię oddzielić każdy z komponentów w różnych klasach, na przykład utworzyć klasę Legend. Ale wydaje się głupie stworzenie klasy, która czasami jest tylko 5-10 liniami kodu, i byłoby to brzydsze, ponieważ musiałbym przekazać kilka prywatnych stanów. I nie byłbym w stanie przetestować funkcji pomocnika. Czy mimo to powinienem to zrobić? Czy powinienem to wyssać i przetestować tylko publiczny remis()? Czy jest jakieś inne rozwiązanie?
Może to być pomocne [Jak testowanej jednostki prywatne w JavaScript] (http://philipwalton.com/articles/how-to-unit-test-private-functions-in-javascript/) – amirnissim