[[oktatas:web:javascript:javascript_teszt|< JavaScript teszt]] ====== JavaScript teszt - Mocha ====== * **Szerző:** Sallai András * Copyright (c) 2021, Sallai András * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== A Mocha ===== Node.js és böngészőben használható tesztelő keretrendszer JavaScript számára. * https://mochajs.org/ (2021) ===== Telepítés ===== Npm globálisan: npm install --global mocha vagy a projekt számára fejlesztéshez: npm install --save-dev mocha ===== Ellenőrzés ===== Ha globálisan van telepítve: mocha --version Ha csak helyben van: npx mocha --version ===== Kezdés ===== A projekt gyökérkönyvtárában készítsünk egy test nevű könyvtárat, amiben létrehozunk egy valami.js nevű tesztet: mkdir test $EDITOR test/valami.js A $EDITOR a kedvenc szerkesztőnket jelenti. A szerkesztőben: describe('Valamik', function() { it('valami', function() { //teszt jön ide }); }); ==== Futtatás paranccsal ==== A futtatható mocha parancs a **node_modules/mocha/bin/mocha** útvonalon található. Futtatható az útvonal megadásával: ./node_modules/mocha/bin/mocha Vagy: npx mocha ===== Async teszt ===== A szerkesztőben: describe('Valamik', function() { it('valami', function(done) { done(); }); }); ===== Tömb tartalma ===== var assert = require('assert'); describe('Tömb', function() { describe('#indexOf()', function() { it('Ha nincs benne 6 -1 kell legyen az eredmény', function() { assert.equal([1, 2, 3, 4, 5].indexOf(6), -1); }); }); }); ==== Node.js feladat készítése ==== A futtatáshoz használhatjuk az npm parancsot, ha a package.json fájlban írok hozzá egy feladatot (task, script): "scripts": { "test": "mocha" } Futtatás: npm test ===== Böngészőből ===== Mocha
===== Kizáró tesztek ===== Csak az "egy" fusson, az only() függvénnyel van beállítva: describe('valami', () => { it.only('egy', () => { }); it('ketto', () => { }); }); Az "egy" ne fusson, a skip() függvénnyel van beállítva: describe('valami', () => { it.skip('egy', () => { }); it('ketto', () => { }); }); Az xit használata: describe('valami', () => { xit('egy', () => { }); it('ketto', () => { }); }); ===== Horgok ===== describe('horgok', function () { before(function () { // egyszer lefut az első teszt előtt a blokkban }); after(function () { // egyszer lefut az utolsó teszt után a blokkban }); beforeEach(function () { // minden teszt előtt lefut a blokkban }); afterEach(function () { // minden teszt után lefut a blokkban }); //tesztesetek ... }); ===== Böngészőben futó függvény tesztelése ===== A HTML oldalon és a package.json fájlban is be kell állítani a type értéket module-ra. function calcArea(base, height) { return 0.5 * base * height; } export {calcArea} import assert from 'assert'; import { calcArea } from '../src/triangle.js'; describe('A calcArea() függvény tesztje', function() { it('Ha a bemenet 30, 35, eredmény 525', function() { const base = 30; const height = 35; const area = calcArea(base, height); // expect(area).to.equal(525); assert.equal(area, 525); }); }); ===== Pontosság ===== it('180, 210 bemenetre 572.8719373579187', () => { const actual = calcWeight(180, 210); const expected = 572.8719373579187; assert(actual.toPrecision(5) === expected.toPrecision(5)); }) vagy: it('180, 210 bemenetre 572.8719373579187', () => { const actual = calcWeight(180, 210).toPrecision(5); const expected = 572.8719373579187.toPrecision(5); assert(actual === expected); }) ===== Függvény vizsgálata ===== escribe('calcWeight', () => { it('van ilyen függvény?', () => { assert(typeof calcWeight === 'function'); }); }); ===== Hibakezelés ===== function calcWeight(perimeter, length) { if(perimeter <= 0 || length <= 0) { throw new Error('Érvénytelen paraméter'); } return perimeter*perimeter*length/11877 } export {calcWeight} it('0, 210 bemenetre 0', () => { assert.throws(() => { calcWeight(0, 210) }, Error); }) it('0, 210 bemenetre 0', () => { let error; try { calcWeight(0, 210) } catch (err) { error = err; } assert.ok(error); assert.equal(error.message, 'Érvénytelen paraméter'); Teljes kód: import assert from 'assert'; import {calcWeight} from '../src/tools.js'; describe('calcWeight', () => { it('van ilyen függvény?', () => { assert(typeof calcWeight === 'function'); }); it('200, 200 bemenetre 673.570767028711', () => { const actual = calcWeight(200, 200); const expected = 673.570767028711; assert(actual === expected); }); it('180, 210 bemenetre 572.8719373579187', () => { const actual = calcWeight(180, 210); const expected = 572.8719373579187; assert(actual === expected); }) it('1, 210 bemenetre 0.017681232634503663', () => { const actual = calcWeight(1, 210); const expected = 0.017681232634503663; assert(actual === expected); }) it('0, 210 bemenetre 0', () => { assert.throws(() => { calcWeight(0, 210) }, Error); }) it('0, 210 bemenetre 0', () => { let error; try { calcWeight(0, 210) } catch (err) { error = err; } assert.ok(error); assert.equal(error.message, 'Érvénytelen paraméter'); }) }); ===== chai ===== * https://www.chaijs.com/ A chai segítségével assert típusú állítások helyett expect típusúakat használhatunk. ===== Linkek ===== * https://mochajs.org/ (2023) * https://devhints.io/chai (2023)