[[oktatas:web:javascript:javascript_teszt:jasmine|< Jasmine]] ====== Jasmine - TDD ====== * **Szerző:** Sallai András * Copyright (c) 2022, Sallai András * Szerkesztve: 2022, 2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== A TDD ===== A **TDD** a **Test-driven development** rövidítése, magyarul **Tesztvezérelt fejlesztés**. A tesztelés és a fejlesztést kis iterációkban egymás után végezzük. ===== Kezdőprojekt ===== Adott egy projekt: app01/ |-src/ | |-app.js | |-index.html | `-style.css |-.gitignore |-bs-config.json `-package.json ==== A fájlok tartalma ==== Az app.js és a style.css egy-egy üres fájl. doc

doc

node_modules/ { "server": [ "src", "node_modules/bootstrap/dist/css", "node_modules/bootstrap/dist/js" ], "port": 8000 } { "name": "app10", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "test": "jasmine", "start": "lite-server" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "jasmine": "^4.1.0", "lite-server": "^2.6.1" }, "dependencies": { "bootstrap": "^5.1.3" }, "type": "module" } ==== Jasmine ==== Telepítsük a Jasmine-t: npm install jasmine Készítsük fel a projektet a Jasmine használatára: npx jamine init ===== A TDD ===== ==== iteráció 1 ==== A program írását a teszt elkészítésével kezdjük. Írjunk meg tesztet: import { calcTriangle } from '../src/triangle.js'; Éppen csak annyi kódot írunk, hogy a teszt hibára fusson. Mivel nem létezik a ../src/triangle.js, ezért a teszt hibára fut. Írjuk meg a kódot, olyan szinten, hogy ne fusson hibára a teszt: export var calcTriangle = () =>{} Refaktoráljunk: import { calcArea } from '../src/triangle.js'; describe('Háromszög számítások', () => { it('A calcArea függvény létezik', () => { expect(calcArea).not.toBeUndefined(); }); }); export var calcArea = () =>{} A teszt futtatása: npm test > app10@1.0.0 test > jasmine Randomized with seed 96701 Started . 1 spec, 0 failures Finished in 0.018 seconds Randomized with seed 96701 (jasmine --random=true --seed=96701) ==== iteráció 2 ==== Követeljük meg, hogy a calcArea() függvény fogadjon két paramétert: import { calcArea } from '../src/triangle.js'; describe('Háromszg számítások', () => { it('A calcArea függvény létezik', () => { expect(calcArea).not.toBeUndefined(); }); it('A calcArea 30, 35 param. 525.-t adjon vissza', () => { let result = calcArea(30, 35); expect(result).toEqual(525.); }); }); Fejlesszük a kódot annyira, hogy a függvény fogadja a kódot. export var calcArea = () =>{return 525.} Nézzük meg, hogy tudunk-e rafaktorálni. Mivel nem, folytatjuk. npm test > app10@1.0.0 test > jasmine Randomized with seed 18381 Started .. 2 specs, 0 failures Finished in 0.022 seconds Randomized with seed 18381 (jasmine --random=true --seed=18381) ==== iteráció 3 ==== Fejlesszük a tesztet: it('A calcArea 40, 45 param. 900.-t adjon vissza', () => { let result = calcArea(40, 45); expect(result).toEqual(900.); }); A teljeskód: import { calcArea } from '../src/triangle.js'; describe('Háromszg számítások', () => { it('A calcArea függvény létezik', () => { expect(calcArea).not.toBeUndefined(); }); it('A calcArea 30, 35 param. 525.-t adjon vissza', () => { let result = calcArea(30, 35); expect(result).toEqual(525.); }); it('A calcArea 40, 45 param. 900.-t adjon vissza', () => { let result = calcArea(40, 45); expect(result).toEqual(900.); }); }); Írjunk annyi kódot, hogy teljesítse a tesztet. export var calcArea = (base, height) =>{ return base * height / 2; } ==== iteráció 4 ==== Fejlesszük a tesztet: it('A calcArea kivételt dob 0 inputra', ()=> { expect(()=> calcArea(0, 35) ) .toThrow(new Error('Hiba! Az alap nem lehet kisebb mint 1')); }); import { calcArea } from '../src/triangle.js'; describe('Háromszög számítások', () => { it('A calcArea függvény létezik', () => { expect(calcArea).not.toBeUndefined(); }); it('A calcArea 30, 35 param. 525.-t adjon vissza', () => { let result = calcArea(30, 35); expect(result).toEqual(525.); }); it('A calcArea 40, 45 param. 900.-t adjon vissza', () => { let result = calcArea(40, 45); expect(result).toEqual(900.); }); it('A calcArea kivételt dob 0 inputra', ()=> { expect(()=> calcArea(0, 35) ) .toThrow(new Error('Hiba! Az alap nem lehet kisebb mint 1')); }); }); export var calcArea = (base, height) =>{ if (base<1) { throw new Error('Hiba! Az alap nem lehet kisebb mint 1'); } return base * height / 2; } Refaktoráljuk a kódokat: export var calcArea = (base, height) =>{ if (base<1 || height <1) { throw new Error('Hiba! A paraméter nem megfelelő'); } return base * height / 2; } import { calcArea } from '../src/triangle.js'; describe('Háromszög calcArea függvény\n', () => { it('A calcArea függvény létezik', () => { expect(calcArea).not.toBeUndefined(); }); it('A 30, 35 inputra 525.-t ad vissza', () => { let result = calcArea(30, 35); expect(result).toEqual(525.); }); it('A 40, 45 inputra 900.-t ad vissza', () => { let result = calcArea(40, 45); expect(result).toEqual(900.); }); it('Kivételt dob 0 inputra', ()=> { expect(()=> calcArea(0, 35) ) .toThrow(new Error('Hiba! A paraméter nem megfelelő')); }); }); A teszt futtatása: npm test > app10@1.0.0 test > jasmine Randomized with seed 95608 Started .... 4 specs, 0 failures Finished in 0.02 seconds Randomized with seed 95608 (jasmine --random=true --seed=95608)