Test
Kurulum
Mithril.js uygulamalarını test etmek oldukça kolaydır. Başlamanın en kolay yolu ospec, mithril-query ve JSDOM kullanmaktır. Bunları kurmak için bir terminal açın ve şu komutu çalıştırın:
npm install --save-dev ospec mithril-query jsdom
Kurulum nispeten kolaydır ve şu adımlarla tamamlanabilir:
package.json
dosyanızdaki npm betiklerine bir"test": "ospec"
satırı ekleyin. Bu, projenize özgü diğer alanlarla birlikte aşağıdaki gibi görünecektir:
{
"name": "my-project",
"scripts": {
"test": "ospec --require ./test-setup.js"
}
}
- Şuna benzeyen bir kurulum dosyası olan
test-setup.js
oluşturun:
var o = require('ospec');
var jsdom = require('jsdom');
var dom = new jsdom.JSDOM('', {
// `requestAnimationFrame` kullanabilmek için
pretendToBeVisual: true,
});
// Mithril.js'in çalışabilmesi için gerekli global değişkenleri tanımlayın. Ayrıca, ilk ikisi genellikle
// testlerde kullanışlıdır.
global.window = dom.window;
global.document = dom.window.document;
global.requestAnimationFrame = dom.window.requestAnimationFrame;
// Doğru şekilde yüklendiğinden emin olmak için Mithril.js'i yükleyin.
require('mithril');
// Son olarak, testler bittiğinde JSDOM'un kapatıldığından emin olun.
o.after(function () {
dom.window.close();
});
- Bir bileşen oluşturun, örneğin
src/my-component.js
:
function MyComponent() {
return {
view: function (vnode) {
return m('div', vnode.attrs.text);
},
};
}
module.exports = MyComponent;
- Son olarak, bir test dosyası oluşturun, örneğin
src/tests/my-component.js
:
var mq = require('mithril-query');
var o = require('ospec');
var MyComponent = require('../my-component.js');
o.spec('MyComponent', function () {
o('her şey çalışıyor', function () {
var out = mq(MyComponent, { text: 'Yaşamak için ne kadar harika bir gün!' });
out.should.contain('gün');
});
});
Her şeyi kurduktan sonra, kurulumu yaptığınız terminalde şu komutu çalıştırın:
npm test
Her şeyi doğru bir şekilde kurduysanız, şöyle bir çıktı almalısınız:
––––––
Tüm 1 doğrulama 0ms'de geçti
En iyi uygulamalar
Test yazmak çoğu durumda basittir. Her test genellikle üç bölümden oluşur: durumu ayarlama, kodu çalıştırma ve sonuçları kontrol etme. Ancak, test yaparken en iyi sonuçları almak ve çok fazla zaman kazanmak için aklınızda bulundurmanız gereken bazı noktalar vardır.
Testlerinizi süreçte mümkün olduğunca erken yazmak isteyebilirsiniz. Testlerinizi hemen yazmanız gerekmez, ancak en azından kodunuzu yazarken testlerinizi de yazmanız önerilir. Bu sayede, işler beklediğiniz gibi gitmezse, neyin yanlış olduğunu hemen anlayıp 5 dakikada çözebilirsiniz; aksi takdirde, 6 ay sonra o harika uygulama fikrini hayata geçirmeye çalışırken 5 gününüzü harcayabilirsiniz. Bu duruma düşmek istemezsiniz.
API'yi test edin, davranışı test edin, ancak uygulamayı test etmeyin. Belirli bir eylem gerçekleşirse bir olayın tetiklendiğini test etmeniz gerekiyorsa, bu tamamen kabul edilebilir bir yaklaşımdır. Ancak testlerinizde DOM yapısının tamamını test etmekten kaçının. Basit bir stil ile ilgili sınıf eklediğiniz için 5 farklı testin bir bölümünü yeniden yazmak zorunda kalmak istemezsiniz. Ayrıca, bir nesneye yeni bir örnek metodu eklediğiniz için tüm testlerinizi yeniden yazmak istemezsiniz.
Kendinizi tekrar etmekten korkmayın; yalnızca aynı dosyada onlarca veya yüzlerce kez aynı şeyi yapıyorsanız ya da açıkça testler oluşturuyorsanız soyutlayın. Normalde, kod yazarken aynı mantığı 2-3 kez tekrar ettiğinizde bunu bir fonksiyona soyutlamak iyi bir uygulamadır. Ancak test yazarken, tekrar eden mantık olsa bile, bu fazlalık sorun giderme sürecinde size yardımcı olacaktır. Unutmayın: testler normal kod değildir, birer şartnamedir.
Birim testi
Birim testi, uygulamanızın bölümlerini, genellikle tek bir modülü, ancak bazen tek bir fonksiyonu bile izole eder ve bunları tek bir "birim" olarak test eder. Belirli bir girdi ve başlangıç durumu verildiğinde, istenen çıktıyı ve yan etkileri üretip üretmediğini kontrol eder. Tüm bunlar karmaşık gelebilir, ancak aslında öyle değil. İşte JavaScript'in +
operatörü için sayılara uygulanan birkaç birim testi örneği:
o.spec('toplama', function () {
o('tamsayılarla çalışır', function () {
o(1 + 2).equals(3);
});
o('ondalıklı sayılarla çalışır', function () {
// Evet, garip olduğu için IEEE-754 kayan noktasına teşekkürler.
o(0.1 + 0.2).equals(0.30000000000000004);
});
});
Tıpkı bunun gibi basit şeyleri birim test edebileceğiniz gibi, Mithril.js bileşenlerini de birim test edebilirsiniz. Diyelim ki şu bileşeniniz var:
// MyComponent.js
var m = require('mithril');
function MyComponent() {
return {
view: function (vnode) {
return m('div', [
vnode.attrs.type === 'goodbye' ? 'Güle güle dünya!' : 'Merhaba dünya!',
]);
},
};
}
module.exports = MyComponent;
Bunun için kolayca birkaç birim testi oluşturabilirsiniz.
var mq = require('mithril-query');
var MyComponent = require('./MyComponent');
o.spec('MyComponent', function () {
o("`type` değeri `hello` olduğunda 'Merhaba dünya!' yazdırır", function () {
var out = mq(MyComponent, { type: 'hello' });
out.should.contain('Merhaba dünya!');
});
o("`type` değeri `goodbye` olduğunda 'Güle güle dünya!' yazdırır", function () {
var out = mq(MyComponent, { type: 'goodbye' });
out.should.contain('Güle güle dünya!');
});
o("`type` değeri belirtilmediğinde 'Merhaba dünya!' yazdırır", function () {
var out = mq(MyComponent);
out.should.contain('Merhaba dünya!');
});
});
Testler, bileşenin nasıl çalışması gerektiğini gösterir ve bileşen de bu gereksinimleri etkili bir şekilde karşılar.