Angular sürümündeki uygulamada, bileşen nav, "Menu" yazan p ve üç rotaya bağlantı içeren ul içerir.
feat/NavBar adında bir dal oluşturun. src/components/ klasörü altında NavBar.cy.tsx, NavBar.tsx adında 2 dosya oluşturun. Her zamanki gibi, bileşenin işlemesi için en az düzeyde başlayın; aşağıdakileri dosyalara kopyalayın ve yarn cy:open-ct ile koşucuyu açtıktan sonra testi çalıştırın.
Bileşenin iskeletini doğrulayan başarısız bir testle başlıyoruz. Üst etiketin bileşen adıyla data-cy niteliği içermesini istiyoruz, bu da bileşeni kullanıldığında daha kolay başvurulabilir hale getirir. Daha sonra önemli olabilecek etiketler için de data-cy nitelikleri ekleyebiliriz (Kırmızı 1).
Uygulama rotalarıyla ilgili önceki bileşenlerde (HeaderBarBrand, ListHeader) react-router-dom'dan NavLink kullandık. Bileşeni aynı şekilde yeniden düzenleyebiliriz. Yeniden düzenleme, önceki yönlendirme ile ilgili bileşenlerde gördüğümüz tanıdık bir Router hatasıyla sonuçlanır. Bileşen testinde, sorunu gidermek için BrowserRouter ile bağlamayı sararız (Düzenleme 1).
Testte yeni başarısızlık var *(uncaught exception)**TypeError: Cannot read properties of undefined (reading 'pathname')*. Ayrıca, başarısızlığın kaynağını anlamamıza yardımcı olan bir TS hatası var Property 'to' is missing in type '{}' but required in type 'NavLinkProps (Kırmızı 2). Bağlantıları to nitelikleriyle güçlendirmemiz gerekiyor (Yeşil 2). Burada önemli olan, TS'nin de başarısız bir testle birlikte, başarısızlığın kaynağını anlamamıza yard
Yeşil bir testimiz olduğunda, başka bir kırmızı elde edene kadar kodu yeniden düzenleyebilir veya ek testler ekleyebiliriz. Bu rotalara tıkladığımızda bizi ilgili URL'lere götüren testler ekleyelim. Test, HeaderBarBrand ve ListHeader bileşenlerinde yapılanlara benzer. Bu geliştirmeler için Cypress'ın seçici oyun alanını kullanabiliriz. Bu durumda, rota değişmedikçe değişmeyecek olan href hedefli cy.get iyi bir seçicidir (Yeşil 3).
Test yeniden yapılandırma sırasında hala yeşil. Şu anda düşünebileceğimiz tek ek test, bağlantıdaki dizeyi kontrol etmektir. route'un string türünde olduğunu belirtebiliriz ve {matchCase: false} ile her iki büyük/küçük harf eşlemesini yapabiliriz (Düzenleme 3).
KırmızıYeşilDüzenleme döngülerinden geçtik, testi mümkün olduğunca geliştirdik ve başarısızlık almadık. Şu anda test aracını tasarım aracı olarak kullanabilir ve görselleri geliştirebiliriz. Angular bileşeninin CSS'ini ekleyelim. Bileşen testine import '../styles.scss' eklemeyi unutmayın.
Stilleri eklerken, görsellerde bir sorun fark ettik; her bağlantı sürekli olarak etkin (Kırmızı 4).
Burada önemli olan, bileşen testinin bize tasarım aracı olarak yardımcı olması ve yeni bir başarısız test oluşturmasıdır. Aktif düğümün active-link sınıfına sahip olması ve diğer düğümlerin sahip olmaması gerekiyor. Başarısız bir test yazalım (Kırmızı 4).
Bileşen testinde, cy.get([href="/${route}"]) öznesinin her doğrulama için ortak olduğunu fark ediyoruz. Cypress' zincir sözdiziminden faydalanarak doğrulamaları daha hafif hale getirebiliriz. Ayrıca menü uzunluğu doğrulamasında daha az sabit kodlama yapabiliriz (Düzenleme 4).
Bileşenin iskeletini belirledik ve onun için başarısız bir test yazdık (Kırmızı 1).
Testi geçmek için minimal bir bileşen oluşturduk (Yeşil 1).
Bileşeni, bağlantı etiketleri yerine NavLinks kullanacak şekilde yeniden düzenledik (Düzenleme 1)
NavLinks'ten eksik bir öznitelikle ilgili olarak TS hatalarıyla desteklenen bir test hatası yaşadık (Kırmızı 2).
to öznitelikleri ve rotaları NavLinks'lere eklendi (Yeşil 2).
Önceki bölümlere benzer şekilde, burada önemli olan TS'nin de başarısız bir testle birlikte bize yardımcı olmasıydı.
Her zaman yeşil bir testimiz olduğunda, yeniden düzenleme yapabilir veya başka bir kırmızı elde edene kadar ek testler ekleyebiliriz.
Tercihimiz, stillerden önce test eklemektir.
Rota kontrolleri için testler ekledik (Yeşil 3) ve testi daha da düzenledik (Düzenleme 3).
Düşünebileceğimiz tüm testleri tükettikten sonra, bileşene stiller ekledik ve görsellerle ilgili bir şeylerin ters gittiğini fark ettik. Her bağlantı etkindi (Kırmızı 4).
Stilleri iki kez kontrol etmek için başarısız bir test yazdık, have.class ve not.have.class iddialarını kullanarak (Kırmızı 4).
Bileşen css'sine aktif ve pasif bağlantıların stilini belirlemek için mantık ekledik (Yeşil 4).
Mantığı daha DRY (Don't Repeat Yourself) olacak şekilde yeniden düzenledik (Düzenleme 4).
Sonunda, bileşen testini Cypress'in zincirleme sözdiziminden faydalanacak şekilde yeniden düzenledik ve daha az sihirli sayı kullandık (Düzenleme 4).
Çıkarılacak Ders
Burada önemli olan, bileşen testinin bize yeni başarısız bir test oluşturmak için tasarım aracı olarak yardımcı olmasıydı. Düşünebildiğimiz kadar çok test yazdık, ancak tüm bağlantıların her zaman etkin olduğunu gördüğümüzde, ek bir özellik düşündük.