oktatas:web:javascript:javascript_teszt:jasmine:peldak:rhombus
Tartalomjegyzék
Jasmine - Rombuszba írható kör sugara
- Szerző: Sallai András
- Copyright © 2023, Sallai András
- Licenc: CC BY-SA 4.0
- Web: https://szit.hu
Bevezetés
Az alábbi program megtalálható a GitHub-on:
A 1-s hasonló, de ott a szimpla Jasmine van használatban:
Az alkalmazás a „Feladat 0312” megvalósítása, a programozási feladatgyűjteményből.
A projekt elkezdése
mkdir tomsbsug cd tombsug code .
npm init -y
pnpm install --save-dev lite-server pnpm install bootstrap
Teszteléshez:
pnpm install --save-dev jasmine-browser-runner jasmine-core
- bs-config.json
{ "server": [ "src", "node_modules/bootstrap/dist/css", "node_modules/bootstrap/dist/js" ], "port": 3000 }
- package.json
{ "name": "tombsug", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "jasmine-browser-runner serve", "start": "lite-server" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "jasmine-browser-runner": "^2.1.0", "jasmine-core": "^5.1.0", "lite-server": "^2.6.1" }, "dependencies": { "bootstrap": "^5.3.1" } }
Alkalmazás
- src/index.html
<!DOCTYPE html> <html lang="hu"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="bootstrap.css"> </head> <body> <header> <h1 class="text-center mt-0 bg-success p-5 text-white"> Rhombus </h1> </header> <div class="container"> <h2>Sugár</h2> <p>A rombuszba írható kör sugara</p> <div class="rhombusForm"> <div class="mt-3"> <label for="side" class="form-label">Oldal</label> <input type="text" id="side" class="form-control"> </div> <div class="mt-3"> <label for="alpha" class="form-label">Alfa szög</label> <input type="text" id="alpha" class="form-control"> </div> <div class="mt-3"> <input type="button" id="calcButton" class="btn btn-primary" value="Számít"> </div> <div class="mt-3"> <label for="radius" class="form-label">Sugár</label> <input type="text" id="radius" class="form-control"> </div> </div> </div> <script src="app.js"></script> </body> </html>
- src/app.js
const doc = { sideInput: document.querySelector('#side'), alphaInput: document.querySelector('#alpha'), radiusInput: document.querySelector('#radius'), calcButton: document.querySelector('#calcButton') } const state = { radius: null } window.addEventListener('load', () => { init() }) function init() { handleEvent() } function handleEvent() { if(doc.calcButton) { doc.calcButton.addEventListener('click', () => { startCalc() }) } } function startCalc() { try { tryStartCalc() }catch(err) { console.log(err.message) alert(err.message) } } function tryStartCalc() { let side = doc.sideInput.value; let alpha = doc.alphaInput.value; state.radius = calcRadius(side, alpha) doc.radiusInput.value = state.radius } function calcRadius(side, alpha) { if(!isValidInput(side)) { throw new Error('Hiba! Az oldal érték hibás!') } if(!isValidInput(alpha)) { throw new Error('Hiba! Az szög érték hibás!') } let rad = alpha * Math.PI / 180 return 1.0/2.0 * side * Math.sin(rad) } function isValidInput(input) { inputStr = String(input) if(!inputStr.match(/^[0-9]+$/)) { return false } if(input <= 0) { return false } return true }
Teszt
Beállítások:
- spec/support/jasmine-browser.json
{ "srcDir": "src", "srcFiles": [ "**/*.js" ], "specDir": "test", "specFiles": [ "**/*[sS]pec.js" ], "helpers": [ "helpers/**/*.js" ], "env": { "stopSpecOnExpectationFailure": false, "stopOnSpecFailure": false, "random": false }, "browser": { "name": "firefox" } }
Az eredetihez képest, két tulajdonságot változtattunk meg:
- specDir
- env:random
A teszt:
- test/app.spec.js
describe('A számítás tesztelése', () => { it('A 30, 35 bementre 8.60364654526569', () => { const expected = 8.60364654526569 const actual = calcRadius(30, 35) expect(actual).toEqual(expected) }) it('A 130, 140 bementre 41.78119462962506', () => { const expected = 41.78119462962506 const actual = calcRadius(130, 140) expect(actual).toEqual(expected) }) it('A 0, 35 bementre Hiba', () => { expect(() => { calcRadius(0, 35) }).toThrow(); }) it('A 30, 0 bementre Hiba', () => { expect(() => { calcRadius(30, 0) }).toThrow(); }) }) describe('A bemenet ellenőrző függvény', () => { it('A 30 bementre true', () => { const expected = true const actual = isValidInput(30) expect(actual).toBe(expected) }) it('Az 1 bementre true', () => { const expected = true const actual = isValidInput(1) expect(actual).toBe(expected) }) it('A abc bementre false', () => { const expected = false const actual = isValidInput('abc') expect(actual).toBe(expected) }) it('A 0 bementre false', () => { const expected = false const actual = isValidInput(0) expect(actual).toBe(expected) }) it('A -4 bementre false', () => { const expected = false const actual = isValidInput(-4) expect(actual).toBe(expected) }) it('A 35a bementre false', () => { const expected = false const actual = isValidInput('35a') expect(actual).toBe(expected) }) })
oktatas/web/javascript/javascript_teszt/jasmine/peldak/rhombus.txt · Utolsó módosítás: 2023/08/23 07:58 szerkesztette: admin