Yksikkötestaus ja JEST-demo

Ympäristön asentaminen

Tee GitHub-repoon kansio jest. Siirry kansioon ja alusta uusi node.js-projekti.

npm init

Asenna JEST, --save-dev tallettaa jest-kirjaston package.json-tiedostoon talteen.

npm install --save-dev jest

Jotta node_modules-kansio ei mene Git-repoosi niin lisätään juurihakemistoon uusi tiedosto .gitignore, kirjoita tiedoston sisällöksi vain node_modules.

Testin luonti

Lisää kandio demot ja luo sinne tiedosto sum.js sekä sum.test.js. Tehdään JavaScript-ohjelma yhteen tiedostoon ja sitä testaavat yksikkötestit toiseen.

sum.js:

const sum = (a, b) => {
    return a + b;
}

module.exports = sum;   

sum.test.js-tiedostossa otetaan käyttöön sum-funktio ja laaditaan kolme testiä yhteenlaskulle:

const sum = require('./sum');

test('yhteenlasku 1+2=3', () => {
    expect(sum(1, 2)).toBe(3);
});

test('yhteenlasku 0+2=2', () => {
    expect(sum(0, 2)).toBe(2);
});

test('yhteenlasku -1+2=1', () => {
    expect(sum(-1, 2)).toBe(1);
});    

Lisää package.json-tiedostoon oikea testauskomento:

  "scripts": {
    "test": "jest --coverage"
  },    

Aja testit komentokehotteessa:

 npm run test

Poikkeuksen heittäminen

Funktio toimii nyt oikeilla arvoilla mutta on hyvä varautua virhetilanteisiin (= poikkeuksiin). Kun funktio kohtaa poikkeuksen se heittää virheen, koodissa voidaan varautua tähän.

sum.js-tiedostossa tarkistetaan alussa ovatko syötteet lukuja:

if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Virheellinen syöte!');
}    

sum.test.js-testitiedostossa testataan toimiiko poikkeuksen heittäminen jos jompi kumpi syöte on virheellinen tai jos syötteet puuttuvat kokonaan:

test('virheellinen syöte', () => {
    expect(() => sum(1, 'b')).toThrow('Virheellinen syöte!');
})

test('virheellinen syöte', () => {
    expect(() => sum('a', 2)).toThrow('Virheellinen syöte!');
})

test('virheellinen syöte', () => {
    expect(() => sum()).toThrow('Virheellinen syöte!');
})