javascript - Jest ile saf bir fonksiyonun diğer bir kaynaktan dışa aktarılmadığını nasıl test edebilirim
// add.js
const add = (a, b) => a +b;
Add fonksiyonunu nasıl test edebilirim? Add fonksiyonunun mantığını test etmek istiyorum. Ama nasıl test edeceğimi bilmiyorum. Çünkü fonksiyon ihraç edilmiyor. Bu fonksiyonun sadece add.js'te çağrılmasını istiyorum.
Bu ekleme fonksiyonunu Jest ile test etmek için dışa aktarmam gerekiyor mu?
Cevap #1
Bu konu hakkında çok tartışma var. Eğer add fonksiyonunuz ihraç edilmemişse, modülünüz için "özel/dahili" olarak kabul edilir ve kamu API’sinin bir parçası değildir. Birçok kişi yalnızca kamu API’sini test etmeniz gerektiğini savunurken, bazıları test etmek istiyorsanız özel fonksiyonlarınızı ihraç etmeniz gerektiğini savunur. Her iki taraf da iyi noktalar sunuyor ve sonuç olarak tercih meselesine indirgeniyor.
Benim tercih ettiğim teknik, bu tür yardımcı fonksiyonları ayrı bir modüle koymak, bunu ayrı olarak test etmek ve ihtiyacınız olan her yerde import etmektir. Bu yöntemler "public" hale gelir, ancak pratikte bunun hiçbir şeyi bozmadığını ve aslında kodu başka bir yerde yeniden kullanabileceğinizi, herhangi bir yeniden düzenlemeye ihtiyaç duymadan fark ettiğimi gördüm.
Ayrıca yöntemlerinizi dışa aktarmayı deneyebilir, ancak popüler JSDoc sözdizimini kullanarak bunları @private olarak işaretleyebilirsiniz. Bu, geliştiricilere metodun içe aktarılmaması veya kullanılmaması gerektiğine dair sadece bir ipuçudur ve bazı editörler/IDE'ler hatta metodu intellisense'den gizleyebilir.
/** @private */
export const add = (a, b) => a + b;
Günün sonunda, rewire gibi bir araç kullanmadan özel (dışa aktarılmamış) yöntemleri gerçekten test edemezsiniz. Eskiden rewire’ı çok kullanırdım, ancak artık önermiyorum çünkü testlerinizi daha karmaşık ve kırılgan hale getiriyor. İyi testlerin basit ve okunması kolay olduğunu gördüm, bu ise rewire gibi şeyler kullandığınızda geçerli değil. "Geliştiriciler bu özel fonksiyonu görememeli veya kullanmamalı" tuzağına düşmeyin - bence bu, kodunuz hakkında toksik bir düşünme şekli.
