JavaScript’te Test Edilebilir Kod Yazmak ve Unit Test ile Sınamak

Birim (Unit) Test Kavramı

Çalışan Bir Kod Yine de Neden Test Edilmelidir

Teknikler ve Stratejiler

Mocha ve Chai ile Birim Test Yazmak

Node.js Kurulumu

Mocha

npm install --save-dev mocha

Chai

npm install --save-dev chai

Yeni Proje Başlatmak

npm install --save-dev mocha chai
{
"name": "mocha_unit_test",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "mocha"
},
"author": "",
"license": "ISC",
"devDependencies": {
"chai": "^4.2.0",
"mocha": "^7.2.0"
}
}

Module’ler için Birim Testlerin Yazılması

module.exports = {    init: () => {
return "Program başladı...";
},

sum: (x,y) => {
return x + y;
},
diff: (x,y) => {
return x - y;
},
divide: (x,y) => {
return x / y;
},
multiple: (x,y) => {
returrr x * y;
}
}
const assert = require('chai').assert;// Referanslar tanımlanıyor
const init = require('../index').init;
const sum = require('../index').sum;
const diff = require('../index').diff;
const divide = require('../index').divide;
const multiple = require('../index').multiple;
describe("Index başlangıç testi", () => {
it("Program başladı... mesajının gelmesi gerekiyor", () => {
assert.equal(init(), "Program başladı...");
});
});
describe("Toplama işlemi testi", () => {
it("3+5 işlemi sonucu 8 gelmeli", () => {
assert.equal(sum(3,5), 8);
});
});
describe("Çıkarma işlemi testi", () => {
it("8-2 işlemi sonucu 6 gelmeli", () => {
assert.equal(diff(8,2), 6);
});
});
describe("Bölme işlemi testi", () => {
it("8/2 işlemi sonucu 4 gelmeli", () => {
assert.equal(divide(8,2), 4);
});
});
describe("Bölme işlemi 0'a bölme testi", () => {
it("8/0 işlemi sonucu Infinity gelmeli", () => {
assert.equal(divide(8,0), Infinity);
});
});
describe("Çarmpa işlemi testi", () => {
it("8*2 işlemi sonucu Infinity gelmeli", () => {
assert.equal(multiple(8,2), 16);
});
});
describe("Çarmpa işlemi 0 testi", () => {
it("8*0 işlemi sonucu Infinity gelmeli", () => {
assert.equal(multiple(8,0), 0);
});
});
describe("Bölme işlemi 0'a bölme testi", () => {
it("8/0 işlemi sonucu 0 gelmeli", () => {
assert.equal(divide(8,0), 0);
});
});

Chai Test Fonksiyonları

Babel

npm install --save-dev babel

Karşılaştırma Metotları

assert.equal(gercek_deger, beklenen_deger, 'mesaj');
assert.equal(gercek_deger, beklenen_deger, 'mesaj');
assert.isAbove(kontrol_edilecek_deger, üstünde_kalacak_olan_deger, 'mesaj');
assert.isAtLast(kontrol_edilecek_deger, en_az_olacak_deger, 'mesaj');
assert.isBelow(kontrol_edilecek_deger, altında_kalacak_olan_deger, 'mesaj');
assert.isBelow(kontrol_edilecek_deger, en_çok_olacak_olan_deger, 'mesaj');

Mantıksal Karşılaştırma Metotları

assert.isTrue(kontrol_edilecek_deger, 'mesaj');

Veri Tipi Kontrol Metotları

assert.isNull(kontrol_edilecek_deger, 'mesaj');
assert.isNaN(kontrol_edilecek_deger, 'mesaj');
assert.exist(kontrol_edilecek_nesne, 'mesaj');
assert.noExist(kontrol_edilecek_nesne, 'mesaj');
assert.typeOf(kontrol_edilecek_deger, 'veri_türü', 'mesaj');

Class’lar için Birim Testlerin Yazılması

class Square {    constructor(a,b,h){
this.a = this.generateA(a);
this.b = this.generateB(b);
this.h = this.generateH(h);
}
generateA(max) {
return Math.ceil(Math.random() * max + 1);
}
generateB(max) {
return Math.ceil(Math.random() * max + 2);
}
generateH(max) {
return Math.ceil(Math.random() * max + 6);
}
calcuateVolume() {
return this.a * this.b * this.h;
}
getA () { return this.a };
getB () { return this.b };
getH () { return this.h };
}module.exports = Square;
const assert = require("chai").assert;let Square = require('../Square');describe("Square", function () {  let square;  before(() => {
square = new Square(1, 2, 15);
});
describe("Minimum değer kontrolleri :", function () { it("A minimum geçerli değerini kontrol et", function () {
assert.isAbove(square.getA(), 1, "A uzunluğu 1'den büyük.");
});
it("B minimum geçerli değerini kontrol et", function () {
assert.isAbove(square.getB(), 2, "A uzunluğu 2'den büyük.");
});
it("H minimum geçerli değerini kontrol et", function () {
assert.isAbove(square.getH(), 6, "A uzunluğu 6'den büyük.");
});
}); describe("Hacim hesabı:", function () { it("Hacim 12 metre küpten büyük olmalı", function () {
assert.isAbove(square.calcuateVolume(), 12, "Hacim hesabı geçerli");
});
it("Hacim (1+1)*(2+2)*(15+6) metre küpten küçük olmalı", function () {
assert.isBelow(square.calcuateVolume(), 168, "Hacim hesabı geçerli");
});
it("Hacim yapan fonksiyon var mı", function () {
assert.exists(square.calcuateVolume(), "Hacim hesabı yapılabilir");
});
it("Hacim değeri sayı olmalı", function () {
assert.typeOf(square.calcuateVolume(), "number", "Hacim hesabı geçerli");
});
}); after(() => console.log("=> Testler bitti."));});

--

--

Full-stack Developer [ UI / UX | JAM Stack | ME(A,R,V)N | LAMP ], Author, Pro Gamer

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store