Testiranje u JavaScriptu

Potrebno

  • bash terminal
  • Git
  • Node i npm
  • osnove HTML-a, CSS-a i JS-a
  • sve ok? možemo dalje?

Testiranje

  • prvenstveno pomaže vama samima
  • stabilnija aplikacija = ušteda vremena
    (i živaca, i novaca...)

(automatizirano)

Testiranje u frontendu

  • nerijetko pada u drugi plan
    ("to ćemo kasnije")
  • donedavno je bilo znatno teže
  • (primjer: horizontal scroll)

Vrste testova

  1. unit testovi
  2. end-to-end testovi

Unit testovi

  • testiraju pojedine dijelove aplikacije u izolaciji
  • funkcije, klase, komponente...
  • odvijaju se u Node.js-u
matcher

Assertion

const actual = getCurrentYear()
const expected = 2022

expect(actual).toBe(expected)
  • kompatibilan s Jestom
  • ali puno brži 💨
  • izvršava sve *.test.js fileove
  • + jsdom = (ograničena) podrška za DOM

Zadatak!

🧑‍💻

👩🏻‍💻

👩‍💻

👩🏼‍💻

👨🏻‍💻

👨🏽‍💻

Prvi dio: setup

  1. napravi novi projekt "kodiraonica-testiranje"
  2. inicijaliziraj ga kao Git repozitorij ("git init")
  3. stavi node_modules u .gitignore
  4. kreiraj package.json koji ima
    { "private": true, "type": "module" }
  5. npm install vitest

Napomena!

Sada kad smo u { "type": "module" } moramo

dodati ekstenziju kad importamo

import { ... } from './api' // won't work!
import { ... } from './api.js' // works!

Drugi dio: testiranje

  1. kreiraj app/api.test.js
  2. napiši test za (još nepostojeći) isPasswordValid
    • isPasswordValid mora vraćati false ako je password:
      • kraći od 6 znakova ili
      • nema barem jedno veliko slovo ili
      • nema barem jedno malo slovo ili
      • nema barem jedan broj
  3. npx vitest run ❌

Treći dio: implementacija

  1. kreiraj app/api.js
  2. implementiraj i exportaj isPasswordValid
  3. hint 🤫 regularni izrazi imaju metodu .test()

Gotov_a?

npx vitest run ✅

Bonus prednost

  • veća šansa da vam (brže) mergaju pull request
  • (primjer: rehype-pretty-code)

Pauza? ⏱ 🥪 ☕️

End-to-end testovi

  • cilj im je testirati korisničko iskustvo
  • odvijaju se u browseru
  • sporiji 🐌 ali moćniji 💪

Čemu E2E testovi? 

  • za probleme koje unit testovi ne mogu uhvatiti
  • Node.js + jsdom ≠ browser
    • jsdom je samo imitacija
  • cross-browser support, responsive dizajn, dark mode, layout...
  • (nekompatibilna) alternativa Cypressu
  • puno brži 💨
  • izvršava sve *.test.js fileove, kao i Vitest 😅
  • meni osobno je:
    • API više developer-friendly
    • bolja dokumentacija

Zadatak!

🧑‍💻

👩🏻‍💻

👩‍💻

👩🏼‍💻

👨🏻‍💻

👨🏽‍💻

Prvi dio: implementacija

  1. kreiraj app/index.html
  2. npx live-server app
  3. dodajte password field i gumb "Provjeri" koji provjerava je li password validan (isPasswordValid)
  4. ovisno o rezultatu pokazuje success ili error message

Drugi dio: setup

  1. npm init playwright
    1. odaberi JavaScript
    2. odaberi folder "e2e"
    3. odbij GitHub Actions workflow (samo Enter)
  2. u playright.config.js
    • promijeni "require" i "module.exports" u import i export sintaksu
  3. specificirajte da Vitest traži samo unutar "app"

Treći dio: testiranje

  1. kreiraj e2e/home-page.test.js
  2. testiraj validaciju passworda, success i error message

Gotov_a?

npx playwright test

Bonus content

import remote

Kamo dalje?

Testiranje u JavaScriptu

By Matija Marohnić

Testiranje u JavaScriptu

  • 325