Javascript'te ne test edilmelidir?


12

İş yerinde, JsTestDriver ve kumaş kullanarak otomatik bir test sistemi uyguladığım yoğun bir Javascript tabanlı uygulamaya (aslında Coffeescript kullanıyor, ancak yine de) başladık.

Bu kadar Javascript ile hiç bir şey yazmadık, şimdiye kadar hiç Javascript testi yapmadık. Birim testlerimizde tam olarak neyi test etmemiz gerektiğinden emin değilim. Çeşitli şeyler için JQuery eklentileri yazdık, bu yüzden JsTestDriver ile olabildiğince doğruluk için doğrulanması gerektiği açıktır, ancak ekibimdeki herkes de sayfa seviyesi Javascript'i test etmemiz gerektiğini düşünüyor gibi görünüyor.

Sayfa düzeyi Javascript'i birim testleri olarak test etmemiz gerektiğini düşünmüyorum, bunun yerine her şeyin beklendiği gibi çalıştığını doğrulamak için Selenyum gibi bir sistem kullanıyoruz. Bunun temel sebebi şu anda sayfa düzeyinde Javascript testlerinin JsTestDriver aracılığıyla başarısız olacağı garantidir, çünkü DOM'daki var olmayan öğelere erişmeye çalışıyorlar.

Peki, Javascript'te birim testi ne olmalıdır?


3
Yazdığınız tüm javascript kodlarını modüllere ayırırsınız. Ardından, bu modüllerin giriş ve çıkışlarını test edersiniz. DOM ile ilgili tüm modüller, DOM'yi test etmeniz gerektiği anlamına gelir. Daha iyi bir araç kullanın jsTestDriver.
Raynos

Birim testi iş mantığı olmalısınız. İş mantığınız ve DOM'daki öğeler birbiriyle iç içe geçmişse, bir tasarım kusurunuz vardır. Düzgün bir şekilde birim test edilebilmesi için sayfa öğelerinden mümkün olduğunca fazla iş mantığı oluşturun. DOM öğesi etkileşim doğrulaması için Selenium kullanıyor olmanız gerekir.
maple_shaft

1
@NathanHoad Tarayıcıda çalıştırılan birim testleri yazıyorsunuz, düğüm birimi, qunit ve yasemin mantıklı araçlardır. Tarayıcıda çalışırken DOM'ye sahipsiniz. Tarayıcı testini otomatikleştirmek için test etme gibi bir araç kullanabilirsiniz.
Raynos

1
Teşekkürler. Tarayıcıda çalışabileceğini iddia ettiği gibi jsTestDriver'a bakıyordum, ki teknik olarak doğru olsa da, keşfettim QUnit ile çalışmakla aynı değil. Özel bir Django hata ayıklama araç çubuğu paneli ile QUnit kullanan şu anda kendi aracımda çalışıyorum. Selenyum kullanarak başarısız testleri tespit edebileceğim. Ayrıca, oldukça iyi görünse de, patronumun test için ödeyeceğinden şüpheliyim!
Nathan Hoad

Yanıtlar:


4

Yapabileceğiniz her şeyi test edin.

Saf mantık kolayca test edilebilir.

Kodunuz DOM veya ağ ile etkileşime giriyorsa, çok daha zordur.

Belirli bir kod yerine rastgele bir DOM öğesinde çalışmak için bir kod parçası belirleyebilirseniz, daha kolay bir şekilde test edebilirsiniz. (Elemanı bir parametre üzerinde çalışacak şekilde yapın).

Ajax kullanan kod, sabit verilerle geri arama işlevi çağrılarak test edilebilir. $.ajaxKendi işlevimle üzerine yazdığım bazı testler yaptım . İşiniz bittiğinde gerçek olanı geri koyduğunuzdan emin olun!

Bulabileceğiniz şey, "sayfa düzeyi javascript" gerçekten "sıkı bir şekilde kodlanmış kod" anlamına gelir ve kodun bölümlerini ayırırsanız, bunları bağımsız olarak test edebilirsiniz.

(Selenyum bir birim test aracı değildir. Üst düzey senaryolar için harikadır, ancak test sürüşü yapamazsınız ve yalıtılmış bir ortamda çalışmaz.)


yasemin işlev çağrıları ve yanıt verileri ile alay edebilir, işlevleri geçersiz kılmak yerine buna bakabilirsiniz.
Steve

Açıklığa kavuşturmalıyım - her sayfada fonksiyonlarımız ve benzeri var. İçeride çalışan kodu test etme hakkında daha fazla konuşuyordum $(document).ready(...).
Nathan Hoad

1
Her şey bunun ne kadar büyük olduğu meselesi .... :-) Bunu test edilen tek bir adlandırılmış işleve indirebilmeniz gerektiğini hissediyorum. O zaman test edilmemiş kodunuz tek bir satırdır. (Şimdi bu bir amaç, verilen değil. Pratikte her zaman test edilmemiş birden fazla kod satırım vardı.)
Sean McMillan

@SeanMcMillan - Bir uygulamanın yalnızca DOM'u etkileyen kısımlarını, örneğin bazı DOM öğelerine yalnızca birkaç olayı bağlayan bir işlevi test etmeyi çok zor buluyorum. Bu olayların düzgün yazıldığını nasıl kontrol edersiniz? birim testlerinin yapabileceği bir şey değil, gerçek tarayıcı tıklaması ve kontrolü (selenyum veya başka bir yöntemle)
vsync

@vsync: Belirli bir DOM öğesine bir tıklama işleyicisinin kolayca eklenmiş olduğunu test edebilirsiniz. 'Tıklamanın' doğru işleyici olduğunu ve onu doğru öğeye eklediğinizi test etmenin mümkün olduğunu düşünmüyorum.
Sean McMillan

5

Test algoritmaları. GUI ile yakından ilişkili parçalar daha çok belirli tarayıcıya bağlıdır, bu nedenle selenyum benzeri araçlar kullanılarak test edilmelidir.

Elbette kodunuz, izole edilmiş bir kod parçası olarak algoritmalar içermelidir, eğer değilse, birim testi neredeyse imkansızdır.

jquery eklentileri, btw, birim test edilebilir kolay değildir.


Tüm iyi puan! Nasıl yazıldıklarına bağlı olarak kolayca birim test edilemediklerini kabul ediyorum.
Nathan Hoad

-1

Java ile çalışıyordum ve gördüğüm kadarıyla birim test Java, Java daha katı olduğu için birim test JavaScript'ten daha kolaydır.

Ben test odaklı geliştirme üzerinde satılan en iyi şey bu yüzden de JavaScript test birim nasıl keşfetmek. Java'da veritabanına, Veri Erişim Nesnelerine bağlantı yapan kodu alay ettim ve bunu JavaScript'teki kodu ve AJAX'ı sunucuya çağıran kodu değiştiren kodla karşılaştırdım.

Anlaştığım şey, test edilmesi gereken şeyin açıkça mantık olduğu bana geliyor. Örneğin, birim testleri çalıştırdığınızda AJAX çağrısı yapmak istemezsiniz, çünkü (a) sunucunun çalışıyor olması gerekir ve (b) yavaştır ve birim testinin kurallarından biri, süper hızlı, böylece geliştiriciler onları her dakika gibi çalıştırmaktan kaçınmazlar.

Diğer bir kılavuz ise, sürekli entegrasyon işleminin başarısız olan bir birim testi bulduğunu söyleyen bir e-posta göndermesidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.