Mocha - Chai Assertion Library
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:
- Assert Stil: Klasik doğrulama stilidir. Doğrudan bir ifade ya da değeri doğrulamak için kullanılır.
- Expect Stil: Daha okunabilir bir sözdizimi sağlar ve birçok geliştirici tarafından tercih edilir.
- 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.