Tests voor de vraaggeneratoren + opslagcontrole op alle platforms #8

Merged
lanta merged 1 commit from tests-en-opslagcheck into main 2026-08-29 12:49:05 +00:00
Collaborator

Tests

De app had 6.497 regels JS en geen enkele test. Er is nu een harnas dat de scripts in dezelfde volgorde als index.html in één gedeelde context laadt - de app gebruikt bewust geen modules, dus require() werkt er niet op. Zo worden de echte generatoren getest en niet een nagebouwde kopie. De laadvolgorde wordt uit index.html zelf gelezen, dus een nieuw vak doet automatisch mee zonder dat er een lijst bijgewerkt hoeft te worden.

10 tests, gericht op fouten die een kind direct raken maar die je bij handmatig klikken zelden tegenkomt:

Wat Waarom het pijn doet
Juiste antwoord ontbreekt tussen de opties Kind kan alleen fout klikken en verliest een ster zonder iets verkeerd te doen
Twee identieke opties Verwarrend, en de vraag is onbedoeld makkelijker
Lege vraagtekst Onbeantwoordbaar
Vak zonder generator vraagVoorVak() valt stil terug op vormen: je kiest Topografie en krijgt vormvragen
Alle 19 vakken x elke groep x 3 talen Vertaalfouten laten een generator omvallen; dat merk je pas als iemand de taal omzet

De randgevallen van getalOpties() zitten er ook in, inclusief een generator die niets bruikbaars oplevert - die geeft na 300 pogingen op, en dan mag er geen lege lijst uitkomen.

Draait via .forgejo/workflows/test.yaml op elke push en PR, in seconden klaar. Bewust apart van android.yaml en ios.yaml: je ziet een kapotte generator meteen in plaats van pas na een volledige app-build.

Opslagcontrole

bewaarProfielen() slikt zijn fout stil op (catch(e){}) - en terecht, een crash midden in het spel is erger. Maar daardoor kan een kind een uur spelen en al zijn sterren verliezen zonder enige waarschuwing.

De bestaande zelftest zit in GameViewController.swift en draait dus alleen op iOS. helpers.js doet die controle nu op elk platform (web, Android, iOS) en logt STARTRAILS_SELFTEST STORAGE_OK of STORAGE_ERROR - hetzelfde formaat dat de simulator-stap in ios.yaml al uitleest, dus die blijft gewoon werken.

Geverifieerd

  • 10/10 tests groen
  • Zelftest in een echte browser getest met werkende en met geblokkeerde opslag (gesimuleerde file://-origin): in beide gevallen wordt de juiste regel gelogd en blijft het spel draaien

Niet gewijzigd

Geen spellogica, geen UI, geen vakinhoud. Alleen tests, een workflow en de zelftest-regel in helpers.js.

## Tests De app had 6.497 regels JS en geen enkele test. Er is nu een harnas dat de scripts in dezelfde volgorde als `index.html` in één gedeelde context laadt - de app gebruikt bewust geen modules, dus `require()` werkt er niet op. Zo worden de **echte** generatoren getest en niet een nagebouwde kopie. De laadvolgorde wordt uit `index.html` zelf gelezen, dus een nieuw vak doet automatisch mee zonder dat er een lijst bijgewerkt hoeft te worden. **10 tests**, gericht op fouten die een kind direct raken maar die je bij handmatig klikken zelden tegenkomt: | Wat | Waarom het pijn doet | |---|---| | Juiste antwoord ontbreekt tussen de opties | Kind kan alleen fout klikken en verliest een ster zonder iets verkeerd te doen | | Twee identieke opties | Verwarrend, en de vraag is onbedoeld makkelijker | | Lege vraagtekst | Onbeantwoordbaar | | Vak zonder generator | `vraagVoorVak()` valt stil terug op `vormen`: je kiest Topografie en krijgt vormvragen | | Alle 19 vakken x elke groep x 3 talen | Vertaalfouten laten een generator omvallen; dat merk je pas als iemand de taal omzet | De randgevallen van `getalOpties()` zitten er ook in, inclusief een generator die niets bruikbaars oplevert - die geeft na 300 pogingen op, en dan mag er geen lege lijst uitkomen. Draait via `.forgejo/workflows/test.yaml` op elke push en PR, in seconden klaar. Bewust apart van `android.yaml` en `ios.yaml`: je ziet een kapotte generator meteen in plaats van pas na een volledige app-build. ## Opslagcontrole `bewaarProfielen()` slikt zijn fout stil op (`catch(e){}`) - en terecht, een crash midden in het spel is erger. Maar daardoor kan een kind een uur spelen en al zijn sterren verliezen zonder enige waarschuwing. De bestaande zelftest zit in `GameViewController.swift` en draait dus **alleen op iOS**. `helpers.js` doet die controle nu op elk platform (web, Android, iOS) en logt `STARTRAILS_SELFTEST STORAGE_OK` of `STORAGE_ERROR` - hetzelfde formaat dat de simulator-stap in `ios.yaml` al uitleest, dus die blijft gewoon werken. ## Geverifieerd - 10/10 tests groen - Zelftest in een echte browser getest met werkende en met geblokkeerde opslag (gesimuleerde `file://`-origin): in beide gevallen wordt de juiste regel gelogd en blijft het spel draaien ## Niet gewijzigd Geen spellogica, geen UI, geen vakinhoud. Alleen tests, een workflow en de zelftest-regel in `helpers.js`.
Tests toegevoegd + opslagcontrole voor alle platforms
All checks were successful
Tests / test (pull_request) Successful in 6s
6ee31a131a
Tests
-----
De app had 6.497 regels JS en geen enkele test. Er is nu een harnas dat de
scripts in dezelfde volgorde als index.html in een gedeelde context laadt (de
app gebruikt bewust geen modules), zodat de echte generatoren getest worden en
niet een nagebouwde kopie. De laadvolgorde wordt uit index.html zelf gelezen,
dus een nieuw vak doet automatisch mee.

10 tests, die de fouten vangen die een kind direct raken maar die je bij
handmatig klikken zelden tegenkomt:
- het juiste antwoord ontbreekt tussen de opties (kind kan alleen fout klikken)
- twee opties zijn identiek
- lege vraagtekst
- een vak zonder generator (vraagVoorVak() valt dan stil terug op 'vormen':
  je kiest Topografie en krijgt vormvragen)
- alle 19 vakken x elke groep x alle drie de talen

Opslagcontrole
--------------
bewaarProfielen() slikt zijn fout stil op (catch(e){}), en terecht - een crash
midden in het spel is erger. Maar daardoor zou een kind een uur kunnen spelen
en al zijn sterren verliezen zonder enige waarschuwing.

De bestaande zelftest zat alleen in GameViewController.swift en draait dus
alleen op iOS. helpers.js doet die controle nu op elk platform (web, Android,
iOS) en logt STARTRAILS_SELFTEST STORAGE_OK of STORAGE_ERROR - hetzelfde
formaat dat de simulator-stap in ios.yaml al uitleest.

Geverifieerd in een echte browser met werkende en met geblokkeerde opslag: in
beide gevallen wordt de juiste regel gelogd en blijft het spel draaien.
lanta merged commit ada63b4162 into main 2026-08-29 12:49:05 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
rutger/StarTrails!8
No description provided.