You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/03-code-quality/05-testing-mocha/article.md
+24-24Lines changed: 24 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ Bundan sonraki görevlerde otomatik test kullanılacak.
4
4
5
5
Otomatik test, aslında, bir geliştiricinin asgari eğitiminin bir parçasıdır.
6
6
7
-
## Neden teste ihtiyac var?
7
+
## Neden teste ihtiyaç var?
8
8
9
9
Fonksiyon yazıldığında, genelde ne olması gerektiğini düşünürüz: hangi parametre hangi sonucu verecek gibi.
10
10
@@ -14,26 +14,26 @@ Eğer bir şey yanlışsa kod değiştirilir ve tekrar çalıştırılır, ta ki
14
14
15
15
Fakat bunları tekrar tekrar çalıştırmak iyi bir yöntem değildir.
16
16
17
-
**Bu tekrarları yaparken, bir şeyleri atlamak çokça karşılaşılan bir durumdur**
17
+
**Bu tekrarları yaparken, bir şeyleri atlamak çokça karşılaşılan bir durumdur.**
18
18
19
19
Örneğin, `f` diye bir fonksiyon yazılırken. Test: `f(1)` çalışır fakat `f(2)` çalışmaz. Kod düzeltildi, şimdi `f(2)`çalışmakta. Tamamlandı mı? Fakat `f(1)` tekrar test edilmedi. Bu bir hataya neden olabilir.
20
20
21
21
Bu çok tipiktir. Bir şey geliştirirken çoğu zaman muhtemel olan durumları aklımızda tutarız. Fakat programcıların bu durumların tamamını aklında tutması beklenemez. Bundan dolayı bir tanesini düzeltirken diğerini kırmak çokça yaşanılan bir durumdur.
22
22
23
23
24
-
**Otomatik testlerin koddan ayrı yazılması demektir. Kolayca çalıştırılır ve tüm durumları kontrol edebilir**
24
+
**Otomatik testlerin koddan ayrı yazılması demektir. Kolayca çalıştırılır ve tüm durumları kontrol edebilir.**
25
25
26
-
## Davranışa Yönelik Geliştirme - Behaviour Driven Development(BDD)
26
+
## Davranışa Yönelik Geliştirme - Behaviour Driven Development(BDD)
27
27
28
28
Diyelim ki [Davranışa Yönelik Geliştirme](http://en.wikipedia.org/wiki/Behavior-driven_development) tekniğini kullandınız, BDD sadece test için değil, bundan daha fazlasıdır.
29
29
30
-
**BDD üç şeyin içiçe bulunmasıdır. Bunlar: test,dökümantasyon ve örneklerdir.**
30
+
**BDD üç şeyin iç içe bulunmasıdır. Bunlar: test,dökümantasyon ve örneklerdir.**
31
31
32
32
Yeteri kadar konuştuk. Şimdi örneklere geçebiliriz.
33
33
34
34
## Üs fonksiyonunun geliştirilmesi: Özellikler
35
35
36
-
Diyelimki`us(x,n)` adında bir fonksiyon yazmak isteyelim. Bu `x`i üssü olan `n` kadar artırsın. Ayrıca `n≥0` olduğunu varsayalım.
36
+
Diyelim ki`us(x,n)` adında bir fonksiyon yazmak isteyelim. Bu `x`i üssü olan `n` kadar artırsın. Ayrıca `n≥0` olduğunu varsayalım.
37
37
38
38
Bu görev sadece örnektir: Bunun yaptığını yapan `**` operatörü vardır ve aynı işi yapar. Burada bizim konsantre olacağımız olay bunun geliştirilmesi sürecidir. Bu daha karmaşık görevlerde de aynı şekilde kullanılabilir.
39
39
@@ -61,9 +61,9 @@ Bu özelliğin 3 ana bölümü vardır:
61
61
62
62
63
63
`assert.equal(value1, value2)`
64
-
: `it` bloğunun içindeki ko eğer doğru ise hatasız döner.
64
+
: `it` bloğunun içindeki kod eğer doğru ise hatasız döner.
65
65
66
-
`assert*` fonksiyonu `us`'ün beklendiği gibi çalışıp çalışmadığını kontrol eder. Burada `assert.equal`'ı kullanılmaktadır. Argümanları karşılaştırarak eşitlik olmadığı durumda hata verir. Burada `us(2,3)`, `8` e eşit mi diye bakılır
66
+
`assert*` fonksiyonu `us`'ün beklendiği gibi çalışıp çalışmadığını kontrol eder. Burada `assert.equal`'ı kullanılmaktadır. Argümanları karşılaştırarak eşitlik olmadığı durumda hata verir. Burada `us(2,3)`, `8` e eşit mi diye bakılır.
67
67
68
68
İleriki dönemlerde farklı karşılaştırmaları göreceksiniz.
69
69
@@ -74,15 +74,15 @@ Genelde akış şu şekildedir:
74
74
75
75
1. Başlangıçta en basit fonksiyonalite test edilir.
76
76
2. Bunun uygulaması yapılmıştır.
77
-
3. Çalışıp çalışmadığını [Mocha](http://mochajs.org/) kullanarak yapabilirsiniz. Hata alındığında kod tekrar düzeltilmeli, taki her şey düzgün şekilde çalışana kadar.
78
-
4. Şu anda çalışan ve uygulaması yapılmmış bir testiniz var.
77
+
3. Çalışıp çalışmadığını [Mocha](http://mochajs.org/) kullanarak yapabilirsiniz. Hata alındığında kod tekrar düzeltilmeli, ta ki her şey düzgün şekilde çalışana kadar.
78
+
4. Şu anda çalışan ve uygulaması yapılmış bir testiniz var.
79
79
5. Daha fazla koşul ekleyerek bunların uygulamasını yazdığınızda testlerde hata almaya başlarsınız.
80
80
6. Üçüncü adıma dönüp bu testlerin hatalarını düzeltene kadar hata almaya devam edersiniz.
81
81
7. 3-6 arasını düzelterek tüm fonksiyonalite hazır oluncaya kadar devam edin.
82
82
83
83
Öyleyse geliştirme süreklilik tekrar bu işlemler üzerinden geçerek devam eder. *Özellikleri* yazıldıktan sonra, bunların uygulaması yapılır, sonra daha fazla test yazılır ve çalıştığına emin olunur.
84
84
85
-
Bizim durumumuzda ilk adım tamamlandı. Başlangıçta `us` için özelliği tanımladık. Şimdi bunun uygulamasını yapmaya geldi. Fakat öncesinde bir defa kodu çalıştıralım bakalım testler uygulamasını yazmadan çalışacak mı? (hepsinin hata vermesi lazım)
85
+
Bizim durumumuzda ilk adım tamamlandı. Başlangıçta `us` için özelliği tanımladık. Şimdi bunun uygulamasını yapmaya geldi. Fakat öncesinde bir defa kodu çalıştıralım bakalım testler uygulamasını yazmadan çalışacak mı? (hepsinin hata vermesi lazım)
86
86
87
87
88
88
## Özelliklerin uygulaması
@@ -93,7 +93,7 @@ Test için aşağıdaki JavaScript kütüphaneleri kullanılacaktır:
93
93
-[Chai](http://chaijs.com) -- birçok assertion kullanmamıza neden olur. Assertion ( sav, iddia ) şimdilik sadece `assert.equal` kullanılacak.
94
94
-[Sinon](http://sinonjs.org/) -- var olan fonksiyonların taklidini yapabilir. Buna daha sonra ihtiyaç duyulacak.
95
95
96
-
Bu kütüphaneler hem tarayıcı, hemde sunucu tabanlı testlerde kullanılabilir. Burada tarayıcı versiyonunu kullanılacaktır.
96
+
Bu kütüphaneler hem tarayıcı, hem de sunucu tabanlı testlerde kullanılabilir. Burada tarayıcı versiyonunu kullanılacaktır.
97
97
98
98
HTML sayfasının tamamı bu çatılar ve `us` özellikleri ile:
99
99
@@ -106,7 +106,7 @@ Bu sayfa dört bölüme ayrılabilir:
106
106
4.`<div id="mocha">` HTML elementi Mocha'nın çıktısını vermek için kullanılacaktır.
107
107
5. Testler `mocha.run()` komutuyla başlar.
108
108
109
-
Sonuc:
109
+
Sonuç:
110
110
111
111
[iframe height=250 src="pow-1" border=1 edit]
112
112
@@ -178,7 +178,7 @@ Sonuç:
178
178
179
179
[iframe height=250 src="pow-2" edit border="1"]
180
180
181
-
Beklendiği üzre ikinci test başarısız oldu. Bizim fonksiyonumuz her zaman `8`dönderiyordu, ikincide ise `assert``27`cevaını bekledi.
181
+
Beklendiği üzere ikinci test başarısız oldu. Bizim fonksiyonumuz her zaman `8`döndürüyordu, ikincide ise `assert``27`cevabını bekledi.
182
182
183
183
184
184
## Test uygulamalarını geliştirme.
@@ -196,7 +196,7 @@ function us(x, n) {
196
196
return sonuc;
197
197
}
198
198
```
199
-
Fonksiyonun doğruluğunu kontrol etme amaçlı, `it` bloğunu otomatik olarak `for`dönügüsü kontrol etsin.
199
+
Fonksiyonun doğruluğunu kontrol etme amaçlı, `it` bloğunu otomatik olarak `for`döngüsü kontrol etsin.
200
200
201
201
```js
202
202
describe("us", function() {
@@ -255,7 +255,7 @@ describe("us", function() {
255
255
256
256
[iframe height=250 src="pow-4" edit border="1"]
257
257
258
-
İleride daha fazla `it` ve `describe` eklendiğinde kendine air yardımcı fonksiyonlar da yazabilirsiniz. Bu fonksiyonlar `testEt`e erişemezler.
258
+
İleride daha fazla `it` ve `describe` eklendiğinde kendine ait yardımcı fonksiyonlar da yazabilirsiniz. Bu fonksiyonlar `testEt`e erişemezler.
259
259
260
260
261
261
````smart header="`before/after` and `beforeEach/afterEach`"
@@ -293,7 +293,7 @@ Testler bitti – tüm testlerden sonra (after)
Genelde `beforeEach/afterEach` (`before/each`) başlangıçta ösellikleri ayarlama, sayacı sıfırlama veya testler arasında bir şey yapma gibi aksiyonları gerçekleştirir.
296
+
Genelde `beforeEach/afterEach` (`before/each`) başlangıçta özellikleri ayarlama, sayacı sıfırlama veya testler arasında bir şey yapma gibi aksiyonları gerçekleştirir.
297
297
````
298
298
299
299
## Özellikleri geliştirme
@@ -302,7 +302,7 @@ Genelde `beforeEach/afterEach` (`before/each`) başlangıçta ösellikleri ayarl
302
302
303
303
Belirtildiği üzere `us(x,y)` üs olarak sadece pozitif değerler alabilir.
304
304
305
-
Matematiksel hata için JavaScript fonksiyonları genelde `NaN` ( not a number ) dönderiyor. `n` in yanlış değerleri için `NaN` döndürülebilir.
305
+
Matematiksel hata için JavaScript fonksiyonları genelde `NaN` (Not a Number) döndürüyor. `n` in yanlış değerleri için `NaN` döndürülebilir.
306
306
307
307
Öncelikle bu davranışı özelliklere ekleyin:
308
308
@@ -330,7 +330,7 @@ Testin sonucu:
330
330
331
331
[iframe height=530 src="pow-nan" edit border="1"]
332
332
333
-
Yeni eklenen testler başarısız oldu çünkü daha uygulamasını yapılmadı. BDD( Behaviour Driven Development) bu şekilde yapılır. Önce başarısız testler yazılır sonra bu testlerin uygulamaları yazılır.
333
+
Yeni eklenen testler başarısız oldu çünkü daha uygulamasını yapılmadı. BDD (Behaviour Driven Development) bu şekilde yapılır. Önce başarısız testler yazılır sonra bu testlerin uygulamaları yazılır.
334
334
335
335
```smart header="Diğer iddialar(assertion)"
336
336
@@ -347,7 +347,7 @@ Chai içinde daha farklı iddialar da bulunmaktadır bunlardan bazıları:
347
347
- `assert.isFalse(value)` -- `value === false` değerini kontrol eder.
Demekki`us` fonksiyonuna bazı yeni kodlar eklemeniz lazım:
350
+
Demek ki`us` fonksiyonuna bazı yeni kodlar eklemeniz lazım:
351
351
352
352
```js
353
353
functionus(x, n) {
@@ -372,7 +372,7 @@ function us(x, n) {
372
372
[edit src="pow-full" title="Open the full final example in the sandbox."]
373
373
374
374
## Özet
375
-
BDD'de önce özellikler yazılır sonra bunların uygulamaları yapılır. Sonunda hem özellikler hemde çalışan kod yazılmış olur.
375
+
BDD'de önce özellikler yazılır sonra bunların uygulamaları yapılır. Sonunda hem özellikler hem de çalışan kod yazılmış olur.
376
376
377
377
Özellikler üç farklı şekilde kullanılabilir:
378
378
@@ -390,17 +390,17 @@ Testler olmazsa geliştiriciler iki şekilde devam edebilir:
390
390
1. Değişiklik ne olursa olsun yapılır. Sonrasında kullanıcılar bug bulur ve bunları bize bildirir. Tabi bu sizin için normal bir şeyse eğer.
391
391
2. Veya geliştiriciler bu fonksiyona dokunmaya çekinir, eğer gerçekten önemli bir fonksiyonsa bunun altından kalkılamayabilir. Bundan dolayı fonksiyonlara dokunmaya dokunmaya birçok fonksiyon yazılır ve herkes kendine ait kodu kullanır.
392
392
393
-
**Otomatik test edilmiş kod ise bunun tam anlamıyla zıttıdır**
393
+
**Otomatik test edilmiş kod ise bunun tam anlamıyla zıddıdır.**
394
394
395
395
Eğer projede testler yazılmış olsaydı, böyle problemler olmazdı. Testleri çalıştırır ve yaptığınız değişikliklerin herhangi bir yeri etkileyip etkilemediğini anında görebilirdiniz.
396
396
397
-
**Ayrıca iyi test edilmiş kodun mimarisi daha iyidir**
397
+
**Ayrıca iyi test edilmiş kodun mimarisi daha iyidir.**
398
398
399
399
Çünkü değiştirmek ve geliştirmek daha kolaydır. Sadece bu değil
400
400
401
401
Kod öyle bir organize edilmelidir ki her fonksiyonun açık bir şekilde ne yapacağı belli olmalıdır. Hangi değerleri alacağı hangi değerler döneceği. Bu başlangıçtan itibaren iyi bir mimariye sahip olduğunun kanıtıdır.
402
402
403
-
Gerçek hayatta bu bazen kolay olmayabilir. Bazen gerçekten özellikleri yazmak gerçek kodu yazmadan önce çok zor olabilir. Çünkü fonksiyonun nasıl davranacağı tam olarak kesitirilemeyebilir. Fakat genel olarak bakılacak olursa test yazma geliştirmeyi hızlandırır ve daha istikrarlı kılar.
403
+
Gerçek hayatta bu bazen kolay olmayabilir. Bazen gerçekten özellikleri yazmak gerçek kodu yazmadan önce çok zor olabilir. Çünkü fonksiyonun nasıl davranacağı tam olarak kestirilemeyebilir. Fakat genel olarak bakılacak olursa test yazma geliştirmeyi hızlandırır ve daha istikrarlı kılar.
0 commit comments