Mocha - Chai Assertion Library

Tahir Can Yıldız
Kodcular
Published in
2 min readAug 9, 2024

Chai, Node.js ve tarayıcıda çalışan bir BDD/TDD (Davranış Odaklı Gelişim/Test Odaklı Gelişim) assertion (doğrulama) kütüphanesidir. JavaScript kodunuzu test ederken çeşitli iddialar (assertions) yazmanıza olanak tanır. Özellikle Mocha gibi test çerçeveleri ile yaygın olarak kullanılır, ancak diğer test çerçeveleri ile de uyumludur.

Chai’nin Temel Özellikleri

Chai, üç ana doğrulama stilini destekler:

  1. Assert Stil: Klasik doğrulama stilidir. Doğrudan bir ifade ya da değeri doğrulamak için kullanılır.
  2. Expect Stil: Daha okunabilir bir sözdizimi sağlar ve birçok geliştirici tarafından tercih edilir.
  3. Should Stil: Nesneler üzerine bir should özelliği ekleyerek daha doğal bir dil kullanır. Bu stil, bazı durumlarda global namespace’e müdahale ettiği için dikkatli kullanılmalıdır.

Chai Kütüphanesi’nin Stilleri

1. Assert Stili

Bu stil, Chai’nin klasik doğrulama yaklaşımıdır. assert fonksiyonu ile çeşitli doğrulamalar yapılabilir.

const assert = require('chai').assert;

assert.equal(5, 5, '5 should be equal to 5');
assert.isTrue(true, 'true should be true');
assert.isArray([], 'empty array should be an array');

2. Expect Stili

Expect stili, daha okunabilir ve dilbilgisel olarak doğal ifadelerle test yazmanızı sağlar.

const expect = require('chai').expect;

expect(5).to.equal(5);
expect(true).to.be.true;
expect([]).to.be.an('array');

3. Should Stili

Should stili, nesneler üzerine should özelliği ekleyerek, dilbilgisine yakın bir yapıda testler yazmanızı sağlar.

const should = require('chai').should();

(5).should.equal(5);
true.should.be.true;
[].should.be.an('array');

Chai Kütüphanesi’nin Kullanımı

Chai ile doğrulama yazarken, her üç stil de belirli bir bağlamda kullanılabilir. Kullanılan stilin seçimi tamamen geliştiricinin tercihine bağlıdır.

. Nesne Türü Doğrulama: Bir nesnenin türünü doğrulamak için to.be.a veya to.be.an kullanabilirsiniz.

expect({}).to.be.an('object');
expect([]).to.be.an('array');

. Eşitlik Doğrulama: İki değerin eşit olup olmadığını kontrol etmek için to.equal veya to.eql kullanılır.

expect(5).to.equal(5);
expect({ a: 1 }).to.eql({ a: 1 }); // Derin eşitlik

. Boolean Değer Doğrulama: Bir değerin true veya false olup olmadığını kontrol etmek için to.be.true veya to.be.false kullanılır.

expect(true).to.be.true;

. Dizide veya Nesnede Belirli Bir Özellik Doğrulama: Bir dizi veya nesnede belirli bir özelliğin var olup olmadığını kontrol edebilirsiniz.

expect([1, 2, 3]).to.include(2);
expect({ a: 1, b: 2 }).to.have.property('b');

Örnek Kullanım

Chai kütüphanesi, genellikle test çerçeveleri ile birlikte kullanılır. Örneğin, Mocha ile entegre edildiğinde, testler şu şekilde yazılabilir:

const chai = require('chai');
const expect = chai.expect;

describe('Array', function() {
it('should start empty', function() {
const arr = [];
expect(arr).to.be.an('array').that.is.empty;
});
});

Ekstra Özellikler

Chai ayrıca chai-as-promised, chai-http, chai-datetime gibi çeşitli eklentilerle genişletilebilir. Örneğin, chai-as-promised ile asenkron testlerde vaat edilen (Promise) sonuçları test etmek mümkün hale gelir.

const chai = require('chai');
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

const expect = chai.expect;

const myPromise = new Promise((resolve, reject) => {
setTimeout(() => resolve('foo'), 500);
});

expect(myPromise).to.eventually.equal('foo');

Sonuç

Chai, JavaScript testleri için güçlü ve esnek bir doğrulama kütüphanesidir. Üç farklı doğrulama stilini desteklemesi, onu çok yönlü bir araç haline getirir ve geliştiricilerin kendi tercih ettikleri doğrulama stilini kullanmalarına olanak tanır. Mocha gibi popüler test çerçeveleri ile mükemmel uyum sağlar ve JavaScript testlerini daha okunabilir ve bakım yapılabilir hale getirir.

--

--