Açıölçer ve Karma birlikte kullanılabilir mi?


105

Eğer Açıölçer Hala ile kullanmak mümkün olacak E2E testleri için Açısal Senaryo Runner yerine, yani ortalama gelmez Karma benim E2E test çerçeve olarak?


IMO yapabilmelisiniz. Karma sadece test koşucusu. Açıölçerde test durumlarınızı yazdıktan / oluşturduktan sonra .... karma, sorulduğunda onu çalıştırabilmeli. Aynı şekilde, Karma'dan mevcut E2E testlerini çalıştırmasını isteyebilirsiniz.
Haz'13

1
@skeep Webdriver, WebDriver protokolü aracılığıyla ortaya çıkar ve tarayıcılara bağlanır - bu, Karma'nın desteklemediği bir şeydir (bunun yerine WebSockets ve bir web sayfası kullanır). Benzer görevleri çok farklı şekillerde yerine getiriyorlar. Artık kullanımdan kaldırılmış Karma E2E testleri WebDriver'ı kullanmaz ve bundan dolayı zarar görür - tarayıcı içindeki durumu korumalıdır (WebDriver durumu tamamen tarayıcı işleminin dışındadır).
Andy

Yanıtlar:


103

İletki'nin şu anki geliştiricisi tarafından tavsiye edilmiyor:

https://github.com/angular/protractor/issues/9#issuecomment-19927049

Açıölçer ve Karma birlikte kullanılmamalıdır; bunun yerine testleri çalıştırmak için ayrı sistemler sağlarlar. Açıölçer ve Karma, testin farklı yönlerini kapsar - Karma çoğunlukla birim testleri için tasarlanmıştır, Açıölçer ise uçtan uca testler için kullanılmalıdır.

İletki, tarayıcıları sağlamak ve testi yürütmek için bir Selenium / WebDriver sunucusu kullanan WebDriverJS üzerine inşa edilmiştir. Saf WebDriverJS örnekleri burada bulunabilir: http://code.google.com/p/selenium/wiki/WebDriverJs

Ve

https://github.com/angular/protractor/issues/9#issuecomment-19931154

Georgios - Açıölçer ve Karma'yı ayrı tutmanın mantıklı olduğunu düşünüyorum - uçtan uca testler için yerel olay sürüşünü ve web sürücüsünün esnekliğini isterken, birim testleri için dosyaların hızlı yürütülmesini ve otomatik olarak izlenmesini istiyorsunuz.


Bu hala İletki'yi Karma'dan çalıştırmamamız gerektiği doğru mu?
ErikAGriffin

@theLateWizard Kesinlikle doğru, sadece yapmamalısın, yapamazsın :)
Dmitri Zaitsev

75

GÜNCELLEME. İşte olan oluşturduğum basit paket tek komutla herhangi bir proje için asgari Karma kurulum eklemek için npm install min-karma.


Karma ve Açıölçer hakkındaki bazı olası yanılgıları açıklığa kavuşturmak istiyorum . Karma SSS aslında Angular'ın Senaryo Çalıştırıcısı için Adaptör'e atıfta bulunuyor , ancak bunun yerine Açıölçer öneriliyor , ancak terk edilmiş gibi görünüyor .


Karma

Karma çalışacak bir test atlet olan JavaScript dosyaları belirtilen içinde size dosya yapılandırması açıkça veya kullanan düğüm-globs . (JavaScript olmayan harici şablonlar için , Angular'ın Birim Test Kılavuzu, bunları önce JavaScript'te derlemek için Karma html ön işlemcisinin kullanılmasını önerir .)

Bunlar, tüm kaynak dosyalarınız, bazıları , bazıları artı projenizle ilgisi olmayan bazı ek dosyalar veya dosyalar olabilir , yalnızca biraz ekstra yapılandırma sağlar - adını siz verin! Paralel veya tek tek çalıştırabileceğiniz, farklı amaçlar için birden çok karma yapılandırma dosyanız olabilir. Her karma işlemi kendi tarayıcı setini başlatır (bunlar şu anda mevcuttur) .

Bu özellik arasında Karma sadece çalıştırmak için dosyaları kümesini hızlı testler her kaynak dosyası düzenlemek üzerine arka planda çalışan için mükemmel ve parlak anında geri bildirim almak kılan! Tek olumsuz, daha iyi olacağını umduğumuz "gürültülü" hata raporlama!


Karma sadece birim testleri için değildir

Birim testi , kaynak kodunuzun tek bir birimi içindir. Angular'ın durumunda tipik bir birim Açısal Bileşendir ( Service, Factory, Provider, Controller, Filter, Directivevb.). Controllersİnce tutmayı unutmayın , bu yüzden sonlar için çok fazla birim testi kırmızı bir bayraktır .

Bir birim testinde , bu birimin bağlı olduğu diğer tüm kod birimleri (sözde birimin bağımlılıkları) aynı anda test edilmemelidir. Bunun yerine "alay edilmeli", örneğin sahte örnekler gibi basit bir şeyle değiştirilmelidirler. Angular, harika sahte ortam desteği sağlar . İdeal olarak, tüm bu alayları doğrudan testlerinizin içinde görmek istersiniz, bu nedenle tüm bu bağımlılıkların nereden geldiğini asla merak etmenize gerek kalmaz.

Karma , bir grup kaynak kod biriminin birlikte test edildiği ve bağımlılıklarının sadece bazılarının alay edildiği Entegrasyon Testleri için de aynı derecede faydalıdır . Herhangi bir bağımlılığın varsayılan olarak kaynak kodu modüllerinizden sağlandığını hatırlamak önemlidir (bu modüller doğrudan testlerinize enjekte edildiği veya enjekte edilen diğer modüllerin bağımlılıkları olduğu sürece (bu durumda onları enjekte etmenize gerek yoktur) , ancak bunu yapmanın bir zararı yoktur). Sahte bağımlılıklar sağlanan bağımlılıkları geçersiz kılacaktır.

Hızlı ve Sık Koşu , Karma'nın ana özelliğidir . Bu, herhangi bir sunucu talebinden, veritabanı sorgularından, saniyeden daha uzun sürebilecek herhangi bir şeyden kaçınmak istediğiniz anlamına gelir. ( Aksi takdirde hızlı OLMAYACAK! ) Bu uzun süreçler, dalga geçmek isteyeceğiniz süreçlerdir . Bu aynı zamanda $httpdoğrudan kontrolörünüzün veya herhangi bir karmaşık iş mantığı biriminin içine gibi ham düşük seviyeli hizmetleri yerleştirmenin neden kötü bir uygulama olduğunu da açıklar . Bu düşük seviyeli dış iletişim hizmetlerini daha küçük özel hizmetlere sararak , "alay etmeyi" çok daha kolay hale getirirsiniz.

Ne Karma do gelmez sitenizi çalıştıran o Uçtan Uca (E2E) test; işte bu yüzden, olduğu gibi. Prensip olarak, siteyi veya parçalarını yeniden oluşturmak için Angular'ın dahili yöntemlerini kullanabilirsiniz. Küçük parçalar için yararlı ve hızlı bir yol, örneğin direktifleri test etmek için.

Bununla birlikte, testlerinize karmaşık kodlar atmanız önerilmez . Ne kadar çok yaparsanız , gerçekte test ettiğiniz şey yerine o kodda hata yapma şansınız o kadar artar.

Bu yüzden kişisel olarak, düşük seviyeli yöntemleri kullanarak test yöntemlerinin sıklıkla bahsedilen karmaşık yolundan hoşlanmıyorum $http. Düşük seviyeli yöntemlere yapılan herhangi bir referansı , tek sorumluluğu http isteklerinde bulunmak olan kendi özel yöntemlere ayırmak için daha temiz çalışır . Bu özel yöntemler , sahte bir arka uçla değil gerçek arka uçla çalışabilmelidir ! Kolayca test edebileceğiniz - manuel olarak veya Karma'nın başka bir özel yapılandırma ile çalıştırılmasıyla mükemmel bir şekilde , bu yapılandırmayı Karma'yı genellikle çalıştırmak için kullanılan yapılandırmayla karıştırmadığınız sürecedüzenli ve hızlı. Şimdi, özel küçük servislerinizi test ettirerek, diğer mantığınızı test etmek ve bu testleri normal Karma kurulumunuza koymak için güvenli ve kolay bir şekilde onlarla dalga geçebilirsiniz .


Özetlemek. Herhangi bir JavaScript dosyası kümesini çalıştırmak için Karma'yı kullanın . Hızlıdır (olmalıdır). Eksiksiz uygulamanızı görmezsiniz, bu nedenle nihai sonucu etkili ve güvenilir bir şekilde test edemezsiniz . Açıölçer ile çalıştırır mıyım? Neden yapayım? Açıölçeri çalıştırmak Karma'nın amacını bozarak testlerimi yavaşlatırdı . Açıölçeri ayrı ayrı çalıştırmak kolaydır .


İletki

Açıölçer :

AngularJS uygulamaları için uçtan uca bir test çerçevesi. İletki, uygulamanıza karşı gerçek bir tarayıcıda çalışan ve bir kullanıcı gibi onunla etkileşim kuran testler yürütür.

Böylece İletki , Karma'nın yapmadığı şeyi tam olarak yapar - gerçek son uygulamanızı çalıştırın. Bu, hem gücünü hem de sınırlarını ortaya çıkarır:

Tam uygulamayı çalıştırmak , uygulamanızın beklendiği gibi çalıştığı tek güvenilir son testtir. Tam kullanıcı hikayesi senaryoları yazabilir ve bunları testlerinize koyabilirsiniz!

Ancak , kaynak kodunuzun tek tek birimlerini ayırmadan hataları izlemek daha zordur . Bu nedenle, önce JavaScript kodunuzu test etmek için hala Karma'ya ihtiyacınız var .


Şimdi İletki'yi Karma ile çalıştırmak ister miyim ? Bunları kesinlikle paralel olarak ayrı terminal pencerelerinde çalıştırabilirim. Prensip olarak, gerekirse test dosyalarını paylaşmalarını sağlayabilirim, ancak normalde bunu tercih etmem. Neden? Çünkü testlerimi tek ve özel bir amaçla küçük tutmak istiyorum.

Tek istisna, her iki koşucu için yararlı olan test makrolarını tanımlayan bir dosyadır . Ancak bu bir test dosyası değil, bir makro tanımlama dosyası olacaktır .

Bunun dışında testlerim arasında net bir ayrım olmasını seviyorum. Sık ve hızlı çalıştırılacaklar ve eksiksiz uygulama için olanlar. Bu, Karma'yı kullanırken ve Açıölçer kullanırken net bir ayrım yapar .


Birim testi ve e2e testi yapmak istiyorsam, birim testi için karma ortamını ve kullanıcı arabirimi testi veya e2e testi için iletki ayarlamam gerekir mi?
Sunil Garg

@SunilGarg Evet, ikisini de kullanmak istiyorsanız, ama yazdığım gibi Karma sadece birim testi için değil.
Dmitri Zaitsev

1

Karma, Angular ekibi tarafından sağlanan bir test çalıştırıcısıdır, Karma testlerinizi birden fazla tarayıcıda gerçekleştirecek ve bu da uygulamamızın tüm tarayıcılarda uyumlu olmasını sağlayacaktır. Açısal js için Birim Testi karma + yasemin kullanılabilir

Jasmine, bir javascript birim test çerçevesidir ve bize uygulamamızı test etmek için yardımcı programlar sağlayacaktır. Bu, en iyi Angular çerçevede ve dolayısıyla "otomatik birim test aracı" seçimimizde işe yarar. https://github.com/shahing/testingangularjs

Ve Protractor, Angular ve AngularJS uygulamaları için uçtan uca bir test çerçevesidir. İletki, uygulamanıza karşı gerçek bir tarayıcıda, başsız tarayıcılarda, çapraz tarayıcı testlerinde çalışan testler yürütür ve saucelab'larda barındırılabilir.

https://github.com/shahing/Protractor-Web-Automation


1

Evet, karma ve iletki birlikte kullanabilirsiniz. Karma, açısal komutu kullanarak oluşturduğunuz bileşeni birim test etmek için kullanılır, bu bileşenleri karmayı kullanarak test edebilirsiniz. Açıölçer uçtan uca test için kullanılır. Esas olarak UI testi için kullanılır.


Bunu başarmak için hem karma hem de iletki için yapılandırmayı eklemeniz gerekir
Rahul Solanki
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.