Istanbul, Nodejs projelerinde kullanılabilecek bir test kapsama aracıdır Yazılan kodların ne kadarının test edildiğini gösterir ve test edilmemiş alanları tespit ederek, kod kalitesini artırmaya yardımcı olur Code coverage ise yazılan kodların otomatik testler tarafından kapsama alınma oranını ölçer ve test sürecinde eksik kalan yerleri tespit ederek yazılım kalitesini artırmaya yardımcı olur Istanbul'u kullanmak için öncelikle paketi proje klasörüne yükleyip configure dosyasını oluşturmak ve test dosyalarının bulunması gerekmektedir Istanbul'un kapsama raporlarına ulaşmak için ise komut satırında 'istanbul report' komutu kullanılabilir

Node.js projelerinde kod kalitesi ve güvenilirliği önemli bir yer tutar. Bu nedenle, yazılan kodların ne kadarının test edildiği ve test edilmemiş kısımların hangi noktalarda olduğunu bilmek gereklidir. İşte bu noktada, Istanbul isimli test kapsama aracı devreye girer.
Istanbul, Node.js projelerinde kullanılarak kod kapsama oranı analiz edilebilen ve test edilememiş alanların tespit edilebilen bir araçtır. Bu sayede, geliştiriciler yazılan kodların hangi noktalarda eksik ve hatalarını tespit ederek, bunları daha güçlü bir kodlama prensibi oluşturarak düzeltebilir. Istanbul, Node.js projelerinde oldukça yaygın olarak kullanılan ve genellikle kolayca entegre edilebilen bir araçtır.
Istanbul Nedir?
İstanbul, Node.js projelerinde test kapsama analizi yapmak için kullanılan bir araçtır. Projenin hangi bölümlerinin test edildiğini, hangilerinin test edilmediğini ve hangi bölümlerde hataların olduğunu gösterir. İstanbul'u kullanarak, yazılan kodun test kapasitesini basit bir şekilde analiz edebilirsiniz.
Code Coverage Nedir?
Code coverage, yazılan kodların ne kadarının otomatik testler tarafından kapsama alındığının bir ölçüsüdür. Test süreci, yazılım geliştirme sürecinin önemli bir parçasıdır ve başarılı bir test süreci, yazılımın başarısı için gerekli olan bir anahtardır. Code coverage, yazılan kodların hangi oranda test edildiğinin ölçülmesiyle ilgilidir ve bunun sonucunda, yazılımın kalitesini artırmak ve hataları azaltmak mümkündür.
Code coverage'ın amacı, yazılımın ne kadarının test edildiğini ve hangi bölümlerinin test edilmediğini belirlemektir. Bu da geliştiricilere, test sürecinde eksik kalan ve test edilmesi gereken yerleri gösterir. Böylece daha fazla test yazarak programın daha kaliteli olmasını sağlayabilir ve doğru sonuçlar alabilirler. Code coverage, özellikle büyük ve karmaşık projelerde son derece önemlidir ve bu projelerde hataların izlenmesine ve düzeltilmesine yardımcı olur.
Code coverage'ın sonucunu değerlendirmek için birkaç anahtar değer kullanılır. Bu, test edilen fonksiyonların yüzdesi, test edilen kod satırlarının yüzdesi, test edilmeyen kod satırlarının yüzdesi ve test edilmeyen fonksiyonların yüzdesidir. Bu değerler, İstanbul gibi gibi test kapsama araçları kullanarak belirlenir. Aracın sonucunda elde edilen raporlar programın test sürecindeki eksikliklerin tespitini yapmak ve test sürecinin kalitesini artırmak için kullanılabilir.
Istanbul'u Yükleme ve Ayarlama
Istanbul, bir Node.js projesine yüklenerek kullanılabilen bir araçtır. Istanbul'u kullanmak için öncelikle Node.js projesine paket olarak yüklememiz gerekiyor. Bunun için Terminal üzerinde projenin olduğu klasöre gelip npm ile Istanbul'u paket olarak yüklememiz gerekiyor:
Terminal |
---|
npm install --save-dev istanbul |
Yüklenen Istanbul paketi daha sonra proje içerisinde istenildiği gibi kullanılabilir. Ancak Istanbul'u kullanmadan önce konfigürasyon ayarlarının yapılması gerekiyor. Bunun için proje klasörü içerisinde bir konfigürasyon dosyası oluşturuyoruz ve Istanbul ayarlarımızı bu dosya içerisinde tanımlıyoruz.
Aşağıdaki örnekte yer alan 'istanbul.config.js' isimli bir konfigürasyon dosyası oluşturuyoruz. Bu dosya içerisinde Istanbul ayarlarını 'config' nesnesi içerisinde tanımlıyoruz:
istanbul.config.js |
---|
module.exports = { config: 'istanbul.config.yml', reporters: ['json-summary', 'text'], dir: 'coverage', colors: true, watermarks: { statements: [50, 80], branches: [50, 80], functions: [50, 80], lines: [50, 80], }, }; |
Ayar dosyası içerisinde 'config' değeri ile birlikte bir 'istanbul.config.yml' dosyasının da tanımlandığı görülüyor. Bu dosya içerisinde Istanbul'un hangi test kapsama raporlarını alacağı belirtiliyor. Örnekte yer alan 'json-summary' ve 'text' değerleri ile Istanbul, projedeki testlerin kapsama bilgilerini komut satırında hem metin hem de özet JSON formatında gösteriyor.
Ayar dosyasının yanı sıra Istanbul'un çalışması için gerekli olan test dosyaları ve Node.js projesinin ana dosyası da bulunmalıdır. Tüm bu dosyaların yer aldığı klasörde, Terminal üzerinde aşağıdaki komutu çalıştırarak Istanbul'u çalıştırabiliriz:
Terminal |
---|
istanbul cover main.js |
Bu komut, proje klasöründeki 'main.js' dosyasının testlerini çalıştırarak Istanbul'un kapsama analizlerini yaparak raporlama işlemlerini gerçekleştirir.
Istanbul'un kapsama raporlarını incelemek için ise Terminal üzerinde aşağıdaki komutu kullanabiliriz:
Terminal |
---|
istanbul report |
Bu komut ile Istanbul'un projenin kapsama analizlerine dayanarak oluşturduğu raporları görüntüleyebiliriz.
Paketleri Yükleme
Paketlerin yüklenmesi, Istanbul'un projenize eklenmesi için ilk adımdır. Bu adımı gerçekleştirmek için öncelikle terminale geçin ve npm modülünü yükleyin. Bunun için, projenizin tam yerini belirttikten sonra aşağıdaki komutu çalıştırmanız yeterlidir.
Komut | Açıklama |
---|---|
npm install --save-dev nyc | Istanbul'un yüklenmesi için gerekli paketin yüklenmesi. |
Bu komutu çalıştırdıktan sonra, projenizin package.json dosyasının "devDependencies" kısmına nyc paketinin eklendiğini görebilirsiniz. Artık Istanbul'u projenizi kullanabileceksiniz.
Konfigürasyon
Istanbul'un kullanımı için ilk adım, yapılandırma dosyasının hazırlanmasıdır. Bu dosya istanbul.config.js
ismiyle proje kök dizinine yerleştirilmelidir. Bu dosyada, Istanbul'un hangi dosya veya klasörleri kapsama altına alacağı belirtilir.
Bununla birlikte, yapılandırma dosyasında özelleştirmeler de yapabilirsiniz. Örneğin, kapsama raporunun hangi formatlarda oluşturulacağı, raporlama yapılırken es geçilecek dosyaların listesi gibi özellikler belirlenebilir. Aşağıdaki örnek yapılandırma dosyası bu ayarları .nycrc
dosyası üzerinden yapmaktadır:
{ "include": [ "src/**/*.js" ], "exclude": [ "**/test/**", "**/node_modules/**" ], "reporter": [ "lcov", "text-summary" ], "watermarks": { "statements": [50, 80], "functions": [50, 80], "branches": [50, 80], "lines": [50, 80] }}
Yukarıdaki örnekte, include
parametresi ile Istanbul'un hangi dosya veya klasörlere kapsama yapacağı belirtilmektedir. exclude
parametresi, kapsama yapılmasını istemediğimiz dosya veya klasörleri belirtmek için kullanılabilir. reporter
parametresi ile raporlama formatları belirlenebilir. Son olarak, watermarks
ile hangi kapsama oranlarının kabul edilebilir olduğu belirlenebilir.
Code Coverage Raporlama
Istanbul kullanarak projenin test kapsamını ölçtükten sonra, elde edilen sonuçları raporlamak oldukça önemlidir. Istanbul, kullanıcılara kapsama verilerinin hem CLI hem de HTML formatında sunulmasını sağlar. Bu nedenle, proje içinde kapsama raporlamak için genellikle istanbul cover komutunu kullanırız.
Bu komutu kullanarak, proje içindeki testlerin çalıştırılması ve kapsama analizinin yapılması gerçekleşir. Kapsama verileri, CLI'da veya HTML formatında ayrıntılı raporlar halinde sunulur. HTML raporlarında, proje dosyalarının açılması ve test kapsama verilerinin görüntülenmesi için bir web tarayıcı kullanabilirsiniz.
Ayrıca, Istanbul'un yeni bir sürümü olan IstanbulJS Code Coverage Server'da test raporu sunmaktadır. Bu, bir web sunucu üzerinde çalışan bir JS dosyasıdır ve sunucu üzerinde kapsama verilerinin gösterilmesine olanak tanır.
Bunların yanı sıra, Istanbul'un diğer CLI komutları da mevcuttur. istanbul check-coverage komutu, belirli sınırların üzerinde kapsama alınmadıysa hata verme özelliği sunar. istanbul report komutu, API tarafından kapsama verilerinin alınması için kullanılır ve raporlar, sonuçlara göre farklı formatlarda çıktı verir.
Istanbul Komutları | Açıklama |
---|---|
istanbul cover | Testlerin çalıştırılması ve kapsama analizinin yapılması |
istanbul check-coverage | Kapsama alınan sınırların altında kalınırsa hata verme özelliği |
istanbul report | API'ler tarafından kapsama verilerinin alınması ve farklı formatlarda çıktı oluşturulması |
Analiz İşlemi
Projenin testlerini çalıştırmak için öncelikle terminal üzerinden proje dizinine gidilmeli ve `npm test` komutu kullanılmalıdır. Bu işlem, projenin içerisindeki test dosyalarını çalıştıracaktır. Testler tamamlandıktan sonra Istanbul aracı ile kapsama analizi yapılabilir.
Istanbul ile kapsama analizi yapmak için yine terminal üzerinden `istanbul cover ./node_modules/mocha/bin/_mocha` komutu kullanılmalıdır. Bu komut, proje içerisindeki kodların ne kadarının test edildiği ve test edilmeyen kısımların hangi satırlarda olduğu gibi bilgileri içeren bir rapor oluşturacaktır.
Bunun yanı sıra Istanbul aracı, kapsama oranını artırmak için hangi kod bloklarının daha fazla test edilmesi gerektiğini gösteren bir harita da sunmaktadır. Bu harita, geliştiricilere hangi kısımların daha fazla test edilmesi gerektiği konusunda fikir verir ve kod kalitesinin artmasına yardımcı olur.
Istanbul ile gerçekleştirilen kapsama analizi sonrasında elde edilen raporlar, HTML veya JSON formatında kaydedilebilir. Bu sayede geliştiriciler, analiz sonuçlarını daha sonra da kullanabilirler.
Raporlama
Istanbul, test kapsama analizlerinin sonucunu raporlar ve bu raporlarını görüntülemeyi sağlar. Raporlama işlemi konsol ekranında gerçekleşir. Terminal açılır ve "npm run coverage" komutu yazılır. Bu komut çalıştırıldığında proje içerisindeki testler çalıştırılır ve kapsama analizi yapılır. İşlem tamamlandığında konsol ekranında istatistiksel verilerle bir rapor görünür. Bu veriler, kodların test edildiği oranları gösteren ve test edilmeyen kodların nerede olduğunu belirten ayrıntılı bir rapordur. Ayrıca, karmaşık projelerde analizin daha iyi anlaşılmasını sağlamak için analiz sonuçları HTML dosyası olarak da görüntülenebilir.
Istanbul'un raporlama aracı, projenin test kapsamına ilişkin gerekli bilgiler sağlar. Bu bilgiler, test kapsamının hangi bölümlerinin sağlam, hangilerinin güvenilir olmadığını belirten kendi içerisinde bir renk ölçeğini kullanır. Yeşil renk, test kapsamının %75'ten fazlasını kapsayan testleri ifade ederken, sarı renk %50-%75 arasındaki kapsamı belirtir. Kırmızı renk ise, %50'den daha düşük kapsamı gösterir.
Istanbul'un raporlama aracı, testlerin nerede başarısız olduğunu belirlemek için tek başına yeterli değildir. Bu nedenle, raporlama sonuçlarını yorumlamak ve kodun test edilmediği yerleri belirlemek için detaylı bir kod incelemesi yapılması gerekir.
Istanbul'un raporlama aracı sayesinde projenin test kapsamını kolayca analiz edebilir, test edilmemiş kodun yerlerini belirleyebilir ve gerekli iyileştirmeleri yapabilirsiniz.
Istanbul ve Sonuçların Değerlendirilmesi
Istanbul aracının kullanımı, yazılan kodların test edilme oranının tespit edilmesi ve kodun test edilmediği noktaların belirlenmesi açısından oldukça önemlidir. Ancak, Istanbul kullanırken dikkat edilmesi gereken bazı noktalar vardır.
Birincisi, kod kapsama oranı yüksek olan bir projenin, otomatik olarak kaliteli bir proje olduğu anlamına gelmez. İstanbul sadece kapsama oranını ölçer, yazılan kodun kalitesi ile ilgili bir ölçüm yapmaz.
İkincisi, kapsama oranı sadece bir veri noktasıdır. Bir proje içindeki farklı modüllerin test edilme oranlarına bakmak da önemlidir. Bu şekilde, test edilmesi gereken kodun hangi modüllerde olduğu daha iyi anlaşılabilir.
Sonuçların yorumlanması da dikkat edilmesi gereken bir noktadır. Kapsama oranı düşük olan bir projenin, o projenin başarısız olduğu anlamına gelmez. Ancak, düşük kapsama oranı, geliştiricilerin ne kadar özen göstermediğinin bir göstergesi olabilir.
Sonuç olarak, Istanbul aracı kullanarak yazılan kodların kapsama oranlarını ölçmek son derece faydalıdır. Ancak bu oranların yorumlanması ve projenin kalitesini ölçmek için sadece bu verilere bakarak karar vermek mümkün değildir. Projenin ihtiyacına göre başka test kapsama araçları da kullanılabilir.
Alternatif Araçlar
Node.js projelerinde Istanbul aracının yanı sıra alternatif test kapsama araçları da mevcuttur. Bunlar arasında popüler olanlar şunlardır:
- Jest: Facebook tarafından geliştirilen bir JavaScript testing framework'üdür. Jest, performansı ve hızı ile öne çıkar. Ayarları kolaydır ve kullanıcı dostudur.
- Mocha: JavaScript test kapsama aracı ve framework'üdür. Özellikle büyük uygulamaların testlerini çalıştırma konusunda oldukça başarılıdır.
- NYC: JavaScript test kapsama aracıdır ve Istanbul aracının da içinde yer aldığı nyc koleksiyonunun bir parçasıdır. Hem kod kapsamını ölçer, hem de raporlama seçenekleri sunar.
Bu araçlar da, Node.js projelerinde yazılan kodların testlerini yürütmek ve kapsama raporlaması oluşturmak için kullanılabilecek güvenilir seçeneklerdir. Hangi aracın tercih edileceği, projenin ihtiyaçlarına ve geliştiricinin tercihlerine bağlıdır.
Jest
Jest, Facebook tarafından geliştirilmiş olan bir JavaScript Test Framework’üdür. Jest, React projeleri için özellikle sıklıkla kullanılır ve otomatik olarak yapılandırıldığından dolayı projenin test edilmesi için önemli bir zaman tasarrufu sağlar. Jest, kullanımı kolay olması ve hızlı test sonucu döndürmesi ile çok beğenilir ve popülerdir. Jest, ayrıca Snapshots adı verilen bir özellik ile component lerin ne kadar değiştiğinin takibi yapılabilmesine olanak sağlar.
Jest, ayrıca React projeleri için özellikle entegre edilmiş ve sunulmuştur, dolayısıyla React projelerinde Jest kullanımı oldukça yaygındır. Jest’in kullanımı kolay olması ve React projeleri için özel olarak tasarlanmış olması, onu geliştiriciler için ideal bir test aracı haline getirir.
Jest, çok hızlı test sonuçları döndürür ve karmaşık, çok kapsamlı testleri bile sorunsuz bir şekilde yönetebilir. Jest, kullanışlı debug özellikleri ile de dikkat çeker.Özetlemek gerekirse Jest, Facebook tarafından oluşturulmuş, React özelleştirilmiş, hızlı, güvenilir ve kullanımı kolay JavaScript test framework’üdür.
Mocha
Mocha, JavaScript projelerinde kullanılan bir test kapsama aracı ve framework'üdür. Mocha ile JavaScript kodları için otomatik testleri yazabilir, bu testleri kolayca yönetebilir ve kapsama raporlamaları alabilirsiniz. Yapısı sayesinde karmaşık test senaryolarınızı yönetebilir ve testlerinizi kolayca organize edebilirsiniz.
Mocha'nın en önemli özelliklerinden biri, çeşitli test senaryoları için kullanılabilen esnek bir yapıya sahip olmasıdır. Ayrıca Mocha, birçok farklı test kütüphaneleri ve framework'leriyle birlikte kullanılabilir. Bu şekilde testleri daha etkili bir şekilde yönetebilir ve kapsama raporlarını daha detaylı bir şekilde inceleyebilirsiniz.
Mocha, Node.js projelerindeki test kapsama analizi için kullanabileceğiniz alternatif araçlardan biridir. Kullanımı oldukça basit ve öğrenmesi kolaydır. Mocha'nın yanı sıra Jest ve NYC gibi araçlar da JavaScript projelerinizde test kapsama analizi için kullanabileceğiniz diğer seçeneklerdir.
NYC
NYC, JavaScript projelerinde kullanılabilecek bir test kapsama aracıdır. Bu araç, testlerin sayısı ve kapsama oranları gibi istatistikleri sağlamak için kullanılır. Istanbul, daha doğrusu nyc koleksiyonu, test kapsama oranı analizi için Istanbul ile aynı mantığı kullanır ancak genel olarak daha hızlı çalışır.
Nyc, içinde Istanbul da dahil olmak üzere bir dizi farklı aracı barındırır ve bu nedenle farklı bir özellik seçimi sunar. Ayrıca bir CLI ve JSON tabanlı raporlama da sunar. Test kapsama oranı analizi işleminin hızlı olması, nyc'nin tercih edilme nedenlerinden biridir.
Nyc, Karma ve Jest gibi diğer test araçları ile de kullanılabilir. Karma aracı ile birlikte kullanıldığında, nyc genellikle ayarlanması daha kolay bir yapıdadır. Jest gibi bir framework ile kullanıldığında, kapsama oranı analizinin yanı sıra test koşma, raporlama, senaryo tabanlı testler ve hatta snapshot testler de dahil olmak üzere çeşitli özellikler sağlar.
Nyc'nin istatistiklerinin yorumlanması, projenin testlenme çabalarına bağlı olarak değişir. Nyc, kod kapsamının tamamının test edildiği gibi bir izlenim sağlamayabilir. Bu nedenle, kodun tam kapsama oranına sahip olduğu anlamına gelmeyebilir. Ancak, yine de önemli bir katkı sağlar ve kod kapsamının bir ölçüsüdür.