Jasmine testleri yazarken nelere dikkat etmeniz gerektiğini öğrenmek isteyenler için detaylı bir rehber hazırladık Yazılım geliştirme sürecinde doğru ve sağlıklı bir test yapısı oluşturmak için bu önemli detayları kaçırmayın Hemen okumak için tıklayın!

Jasmine testleri, JavaScript kodlarınızın doğru çalıştığından emin olmanıza yardımcı olan bir test çerçevesidir. Jasmine, testleri yazmak ve çalıştırmak için özel bir yapı sunar ve kod yazmanızda size yardımcı olur. Bu şekilde, yazılımınızın doğru çalıştığından emin olabilir ve olası hataları önleyebilirsiniz.
Jasmine, testlerin yazılması ve çalıştırılması için bir dizi özellik sunar. Bu özellikler arasında, benzer veri tiplerinin karşılaştırılmasına yardımcı olan "Matcher'lar", kodunuzun belirli kısımlarının taklit edilmesine izin veren "Spies", ve testlerinizin yapılandırılmasına imkan sağlayan "describe()" ve "it()" fonksiyonları gibi birçok seçenek bulunmaktadır.
Jasmine aynı zamanda asenkron işlemleri test etmek için birçok özellik sunar. Bu, özellikle modern web uygulamaları ve mobil uygulamaları için gerekli olan bir özelliktir. Asenkron testlerin Jasmine tarafından desteklenmesi, yazılımınızın farklı platformlarda çalışabilirliğini garanti altına alır.
Bu nedenle, Jasmine testlerinin doğru şekilde yazılması büyük önem taşır. Bu testlerin doğru yazılması, yazılımınızın kalitesini artırır ve hataların önlenmesine yardımcı olur. Jasmine testlerini yazarken, temel özellikleri ve ileri seviye özellikleri hakkında bilgi sahibi olmak, kodunuzu doğru şekilde test etmenize olanak sağlar.
Jasmine Framework Nedir?
Jasmine, JavaScript programlama dilinde yazılmış ve açık kaynak kodlu bir test framework'üdür. Jasmine ile yazılan testler, başka bir JavaScript framework ya da kütüphaneyle birlikte kullanılabilirler. Jasmine, bir Behavior-Driven Development (BDD) framework'ü olarak kullanıcı odaklı testler yazmayı kolaylaştırır ve kusursuz test raporları sunar.
Jasmine kullanıcılara test sırasında birkaç önemli fonksiyon sağlar. Bunlar arasında describe(), it() ve expect() fonksiyonları yer alır. describe() fonksiyonu test kategorilerini tanımlamak için kullanılırken, it() fonksiyonu tek bir testi tanımlamak için kullanılır. expect() fonksiyonu ise test sonuçlarını kontrol etmek için kullanılabilir.
Bunların yanı sıra, Jasmine'de matcher'lar, spies ve diğer birçok özellik de bulunur. Matcher'lar, test koşullarını kontrol etmek için kullanılır ve kullanıcılar anlaşılır bir dilde test koşullarını tanımlayabilirler. Spies, test edilen işlevlerin çağrılarını takip etmek ve testlerin gerçekleşip gerçekleşmediğini belirlemek için kullanılır.
Jasmine framework'ünün kullanımı oldukça basittir. Jasmine'in gücü, BDD yaklaşımı kullanarak yazılan okunaklı, anlaşılır ve özenle hazırlanmış testlerdir. Bu sayede sadece kullanımı değil, test sonuçlarının analizi de kolay hale gelir ve yazılım projeleri için güvenilir test raporları sunulabilir.
Temel Jasmine Testleri
Jasmine, yazılım geliştiricilerin uygulamalarını test etmek için kullanabileceği mükemmel bir framework'tür. Jasmine ile temel testler yazabilirsiniz. Bunlar testlerinizin temel yapı taşlarıdır ve uygulamanızın belirli özelliklerinin doğru çalışıp çalışmadığı hakkında size bir fikir verirler.
Expectations, temel Jasmine testlerinden biridir. Bu özellik, uygulamanıza belirli bir çıktı beklemenizi sağlar. Örneğin, bir matematik işlemi yazıyorsanız, işlemin doğru sonucunu bekler ve sonucu karşılaştırırız.
Jasmine, farklı Matcher türleri ile çalışır. Bu Matcher'lar, bir beklentinin karşılanıp karşılanmadığını kontrol ederler. Bu Matcher'lar arasında toEqual, toBe, toContain gibi seçenekler bulunur. Bu Matcher'ların kullanımı, testlerin daha fazla esneklik kazanmasına yardımcı olur.
Jasmine Spies özelliği, testlerin ilk bakışta zor görünen birçok senaryonun kısa bir şekilde yazılabilmesini sağlar. Bu özellikle bir birim testinde bir metodun ne kadar sık çağrıldığını kontrol edebilirsiniz.
Jasmine'de describe() ve it() fonksiyonları da temel uygun testlerin yapılmasında büyük önem taşır. describe() fonksiyonu testlerin bölümlere ayrılmasını sağlar ve testlerin okunmasını ve anlaşılmasını kolaylaştırır. it() fonksiyonu ise her bir testin ayrıntılarını açıklar.
Bu Jasmine testlerinin temelleridir. Bu temel Jasmine testlerini bilmeniz, uygulamanızın belirli özelliklerinin iyi bir şekilde test edilmesine ve uygulamanızın doğru çalıştığını doğrulamanıza yardımcı olacaktır.
Expectations
Jasmine testlerinde kullanılabilen Expectations, bir değerin belirli bir değere eşit olup olmadığını veya belirli bir kurala sahip olup olmadığını kontrol etmeye yarayan bir özelliktir. Kullanımı oldukça kolaydır ve temel bir Expectations örneği, aşağıdaki gibidir:
expect(5 + 2).toEqual(7);
Burada beş ve iki sayıları toplandıktan sonra değerleri, Expectations ile 7’ye eşit olup olmadığı kontrol ediliyor. Bu örnek dışında, Expectations ile birçok farklı özellik kontrol edilebilir. Örneğin, bir dizi içinde belirli bir elemanın var olup olmadığını kontrol edebilirsiniz. Bunun için kullanabileceğiniz Expectations örneği:
expect([1, 2, 3]).toContain(2);
Bu örnek de 1, 2 ve 3 değerlerinden oluşan bir dizi içinde 2 elemanının olup olmadığını kontrol ediyor. Expectations, Jasmine testlerinde oldukça faydalı bir özellik olup, testlerinizin doğruluğunu ve etkili olmasını sağlar.
Matcher'lar
Jasmine testleri yazarken kullanabileceğiniz özelliklerden biri de Matcher'lar'dır. Matcher'lar, bir koşulun doğru olup olmadığını kontrol etmek için kullanılan fonksiyonlardır ve Jasmine'de standart olarak birçok Matcher mevcuttur. Farklı Matcher türleri şunlardır:
- toBe(): bir değer başka bir değere eşit mi diye kontrol eder. Örneğin: expect(5).toBe(5);
- toEqual(): iki değerin eşitliğini kontrol eder. Bu Matcher objeleri ve dizileri de kontrol edebilir. Örneğin: expect([1, 2, 3]).toEqual([1, 2, 3]);
- toBeDefined(): bir değişkenin tanımlı olup olmadığını kontrol eder. Örneğin: expect(myVar).toBeDefined();
- toBeNull(): bir değişkenin null olup olmadığını kontrol eder. Örneğin: expect(myVar).toBeNull();
Bu Matcher'lar sadece bazı örneklerdir ve Jasmine'de kullanabileceğiniz birçok Matcher mevcuttur. Ayrıca, kendi Matcher'larınızı da yazabilirsiniz. Bunun için toBe gibi Jasmine'de hazır bir fonksiyonu kullanarak, kendi fonksiyonunuzu da ekleyebilirsiniz. Böylece, kendi test ihtiyaçlarınıza daha uygun hale getirebilirsiniz.
Spies
Jasmine'deki en dikkat çekici özelliklerden birisi de "Spies". Jasmine Spies özelliği, özellikle jQuery ve AJAX gibi asenkron işlemlerle ilgili testler yazarken oldukça kullanışlı bir özelliktir.
Bir "spy", bir fonksiyonun gerçekleştirildiği durumda veya gerçekleştirilmediği durumda çalıştırılabilen bir alternatif fonksiyondur. Spy fonksiyonları sayesinde, gerçek bir fonksiyonun çalışıp çalışmadığını, kaç kez çalıştığını veya hangi değerlerle çalıştığını test edebilirsiniz.
Jasmine, herhangi bir fonksiyona spyOn() metodunu kullanarak özel bir spy eklemenizi sağlar. Bu metot, spyOn(obj, methodName) şeklinde kullanılır ve obje olarak fonksiyonu içeren nesne, "methodName" parametresi olarak ise taklit edilmek istenen fonksiyon adı verilir. Bu fonksiyon adı, spy nesnesine değer olarak atanır ve istediğiniz zaman çağrılabilir.
Örneğin, aşağıdaki kod parçasında, UserService objesi içindeki addUser() fonksiyonuna bir "spy" ekliyoruz:
```describe('UserService', function() { it('should add a new user', function() { spyOn(UserService, 'addUser'); UserService.addUser('John', 'Doe'); expect(UserService.addUser).toHaveBeenCalled(); });});```
Bu örnekte, UserService.addUser() fonksiyonuna spy eklenerek, fonksiyon çağrıldığında jasmine expect() yöntemi kullanılarak test edilir.
Jasmine aynı zamanda spyOn() fonksiyonunu, fonksiyonun dönüş değerlerini taklit etmek için kullanmanıza da olanak tanır. Bu fonksiyon, gerçek fonksiyonun değerini değiştirerek gerekli olan değeri sağlar.
Örneğin, aşağıdaki kod parçasında, "calculateTax()" isimli bir hesaplama fonksiyonunda, kullanıcının vergi ödemek zorunda kalmaması için bir kontrol eklenmiştir:
```function calculateTax(price) { if (price > 500) { return price * 1.18; } else { return price; }}
describe('calculateTax function', function() { it('should not add tax if the price is less than 500', function() { spyOn(window, 'calculateTax').and.callFake(function() { return arguments[0]; }); var price = calculateTax(250); expect(price).toBe(250); });});```
Bu örnekte, "calculateTax" fonksiyonuna spy ekleniyor ve and.callFake() yöntemi kullanarak taklit ediliyor. Bu sayede, fonksiyona iletilen değerler taklit edilerek, sonuçta beklenen değerleri alabiliyoruz.
Spies, Jasmine testlerinde özellikle karmaşık fonksiyonlarla ilgili daha hassas testler yapmak için oldukça yararlıdır. Ancak, Jasmine Spies kullanarak bir fonksiyon taklit ederken, taklit edilen fonksiyonla tam olarak aynı davranışı göstermesine dikkat etmek gerekiyor.
describe() ve it() Fonksiyonları
Jasmine testleri yazarken describe() ve it() fonksiyonları oldukça önemlidir. describe() fonksiyonu, testlerin gruplandırılması ve daha anlaşılır olması için kullanılır. Örneğin, bir login sayfasını test etmek isterseniz, describe() fonksiyonuyla bu testleri gruplandırabilirsiniz.
describe("Login Testleri", function() { |
it("Başarısız Login Testi", function() { |
// testler burada yazılır |
}); |
it("Başarılı Login Testi", function() { |
// testler burada yazılır |
}); |
}); |
it() fonksiyonu ise her bir testin ayrıntılarının tanımlandığı fonksiyondur. Bu fonksiyonlar içinde, test yapılacak işlem veya sayfaların tanımları, beklentiler ve testin sonucunda ne olması gerektiği belirtilir.
Örneğin, yukarıdaki örnekte Baharısız Login Testi fonksiyonu için;
- Kullanıcı adı ve şifresi yanlış girildiğinde, başarısız bir login oluşturulmuştur.
- Test fonksiyonunda gerekli parametreler belirtilir.
- Beğenmediğimiz bir sonuç elde etmek için testin bir kısmı kasıtlı olarak yanlış yapılabilir.
- expect() fonksiyonu ile hatanın nedeni belirtilir.
it() fonksiyonu ile bir test senaryosunun ayrıntıları belirlenerek, her bir fonksiyon ayrı ayrı test edilir. Bu sayede Jasmine testleri, hataların önceden belirlenmesi, analiz ve iyileştirme sürecinde büyük bir yardımcıdır.
Advanced Jasmine Testleri
Jasmine ile ileri düzey testler yazmak, özellikle büyük projelerde testlerin kapsamını arttırmak ve kodun kalitesini sağlamak açısından oldukça önemlidir. Jasmine ile ileri düzey testler yazabilmek için kullanabileceğiniz çeşitli özellikler bulunmaktadır.
Bunlardan biri, beforeEach() ve afterEach() fonksiyonlarıdır. Bu fonksiyonlar, testler arasında tekrarlanan kodu DRY prensibi (Duplication Is Evil) doğrultusunda azaltmanızı sağlayabilir. beforeEach() fonksiyonu, her testin öncesinde çalışacak kod blokları belirlerken, afterEach() fonksiyonu ise her testin sonrasındaki kod bloklarını belirler. Bu sayede, kodunuzu daha okunaklı ve düzenli bir hale getirebilirsiniz.
Jasmine, asenkron işlemleri test etmek için de oldukça kullanışlı bir özellik sunar. Bunun için kullanabileceğiniz fonksiyonlar arasında done() fonksiyonu ve Jasmine Clock fonksiyonu yer almaktadır. done() fonksiyonu, bir asenkron işlem tamamlandığında çağırabileceğiniz bir fonksiyondur. Jasmine Clock fonksiyonu ise, programınızdaki zamanlamayı kontrol etmenizi sağlar.
Bunlarla birlikte, önemli bir Jasmine özelliği olan Spy'lar sayesinde, test edilen fonksiyonların çağrıldığı sayılar, argümanlar ve daha birçok bilgi takip edilebilir. Böylece, testlerinizde olası hataların nedenlerini bulmanız daha kolay hale gelebilir.
Özetlemek gerekirse, Jasmine ile ileri düzey testler yazabilmek için kullanabileceğiniz birçok özellik bulunmaktadır. Bu özelliklerin doğru bir şekilde kullanılması, kodunuzun kalitesini yükseltecektir.
beforeEach() ve afterEach() Fonksiyonları
Jasmine, yazılan testlerin daha düzenli ve okunaklı olması için beforeEach() ve afterEach() fonksiyonlarını kullanmaya olanak sağlar. Bu fonksiyonlar, belirli bir test öncesinde veya sonrasında yapılacak işlemleri tanımlamak için kullanılır. beforeEach() fonksiyonu, her testin öncesinde belirtilen işlemleri yapar ve afterEach() fonksiyonu ise her testin sonrasında istenilen işlemleri gerçekleştirir. Bu sayede, testler arasında ortak işlemlerin tekrarlanması engellenir, kodlar daha temiz ve okunaklı hale gelir.
Aşağıdaki örnekte beforeEach() ve afterEach() fonksiyonları kullanılarak Jasmine testleri yazılmıştır:
describe | beforeEach | test | afterEach |
---|---|---|---|
"Öğrenci sınıfı" | createStudent | "Öğrenci oluşturma testi" | deleteStudent |
"Öğretmen sınıfı" | createTeacher | "Öğretmen oluşturma testi" | deleteTeacher |
Burada, öğrenci ve öğretmen verilerinin oluşturulması beforeEach() fonksiyonunda yapılırken, her testin sonrasında bu verilerin silinmesi afterEach() fonksiyonunda gerçekleştiriliyor. Bu sayede, her test ayrı ayrı veri oluşturmak ve silmek zorunda kalmadan, ortak fonksiyonlar sayesinde temiz bir test ortamı sağlanıyor.
Asenkron Testler ve Jasmine
Jasmine, asenkron işlemlerin test edilmesi için oldukça etkili bir çerçeve olmasıyla ön plana çıkar. Asenkron işlem, işlemlerin eş zamanlı olarak yürütülmesi değil, birbirini beklemeleri veya diğer işlemleri beklemeleri durumunda yürütülmeleri anlamına gelir.
Asenkron işlemin Jasmine testlerinde test edilmesi için, Jasmine'de iki önemli fonksiyon vardır. Bunlar, done() ve setTimeout() fonksiyonlarıdır. done() fonksiyonu, Jasmine'de bir test işlendiğinde, Jasmine'e testin bitmek üzere olduğu bildirilirken, setTimeout() fonksiyonu da Jasmine'de asenkron testlerde kullanılan bir diğer fonksiyondur.
Bu fonksiyonları kullanarak, Jasmine testlerinde asenkron işlemleri gerçekleştirebilir ve doğru sonuçları elde edebilirsiniz. Ayrıca, farklı senaryolarda testlerin nasıl yazılacağına ilişkin örnekler için, Jasmine'in resmi dokümanlarını da inceleyebilirsiniz.
Bunun yanı sıra, Jasmine kullanımında, beforeAll() ve afterAll() fonksiyonları da asenkron testlerde kullanılabilir. Bu fonksiyonlar, testlerin işlenme öncesi ve işlenme sonrası yapılması gereken işlemleri tanımlayarak, testlerin daha etkili bir şekilde gerçekleştirilmesini sağlar.
Sonuç olarak, Jasmine, asenkron işlemlerin test edilmesi için kullanımı oldukça etkili olan bir yazılım kütüphanesi olmasıyla bilinir. Temel bilgileri öğrendikten sonra, Jasmine'in farklı fonksiyonları hakkında bilgi edinerek testlerinizi daha verimli hale getirebilirsiniz.
Jasmine Testleri İçin İpuçları
Jasmine testlerinin doğru ve verimli bir şekilde yazılması, yazılım geliştirme sürecinde oldukça önemlidir. Bu nedenle, Jasmine testlerinin doğru bir şekilde yazılması için dikkat edilmesi gereken bazı ipuçları ve öneriler mevcuttur.
- Tutarlılık: Jasmine testlerinizin tutarlı bir şekilde yazılması, yazılımın doğru çalışmasını sağlar. Tutarlı bir yazım stili benimseyerek, testlerinizi daha okunaklı ve anlaşılır bir hale getirebilirsiniz.
- Test Odaklı Kod Yazımı: Jasmine testleri, kodunuzun doğru çalışıp çalışmadığını doğrulamak için yazılır. Bu nedenle, test kodları, uygulama kodlarından farklı bir yazım stili ve odak ile yazılmalıdır.
- Kapsayıcılık: Jasmine testlerinin kapsayıcılığı, yazılımın doğru çalışmasının yanı sıra, test senaryoların daha kapsamlı bir şekilde yazılmasına olanak sağlar. Bu nedenle, testlerinizi çeşitli durumlar için yazmaya özen gösterin.
- Hata Yakalama: Jasmine testlerinin hataları yakalama konusunda iyi bir araç olması nedeniyle, hataların nedenlerini tespit etmenizde yardımcı olabilir. Hatalar tespit edildiğinde, bunları düzeltmeye önem vermelisiniz.
- Test Verilerinin Oluşturulması: Testlerinizin daha verimli olması için, test verilerinin belirlenmesi ve oluşturulması gerekir. Böylece, uygulamanızın herhangi bir bölümünü test edebilirsiniz.
- Testleri Düzenleme: Jasmine testlerinin düzenlenmesi, mevcut kodun daha iyi anlaşılmasını sağlar. Bu, gelecekteki çalışmalarınızda da faydalı olacaktır.
Bu ipuçları, Jasmine testlerinin daha doğru ve verimli bir şekilde yazılmasını sağlayacaktır. Ancak, başarılı bir yazılım geliştirme süreci için, kaliteli bir kod yazımı ve test yazımı önemlidir. Bu nedenle, Jasmine özelliklerini tam olarak öğrenmek ve Jasmine testlerinin dizaynını yapabilmek için okumalar, test yazımı egzersizleri yapmak ve denemeler yapmanız önemlidir.