-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathLOG.txt
112 lines (100 loc) · 7.85 KB
/
LOG.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
LOG
- = TAEKE
-- = MARCEL
===
Ik probeer alle overige teksten in het engels te doen, maar hier wil ik snel dingen kunnen noteren en dat gaat nog altijd vlotter in het nederlands.
DOEL: Origele code kunnen starten en debuggen vanuit visual studio.
- De originele code blijkt een commandline app in Node JS te zijn (zie LINKS.txt 1).
- In de commandline app kun je op de commandline commandos voor de app in toetsen.
- Als de App gedraait wordt door de game engine neemt hij dit over en voert op dezelfde wijze commando's in.
- De app antwoord desgewenst ook weer op de commandline.
- Node JS dus installeren (zie LINKS.txt 2).
- Er blijkt een extentions voor visual studio te zijn om met Node JS te werken (zie LINKS.txt 3).
- Nu blijkt er een javascript Node JS commandline project tempate geinstalleerd te zijn.
- Template gebruikt en hierin de originele code gekopieerd.
- App.js die door de template aangemaakt wordt weg gegooid.
- Applicatie blijkt niet te starten maar zou nu Bot.js moeten starten.
- Je blijkt door met de rechtermuistoets op een Bot.js te klikken deze als node js startup file in te kunnne stellen.
- Op de website van de game de commandos op gezocht.
- De eerste serie commandos voor het starten van de game in COMMANDS EXAMPLE.txt gezet.
- Nu kun je de app starten in de commando's invoeren op de console app die starten.
- Je kunt nu ook breakpoints in Bot.js in visual studio zetten.
Doel bereikt
DOEL: Node JS code kunnen testen en de specs kunnen debuggen.
- Een blog gevonden die het testen van Node JS beschrijft (zie LINKS.txt 4).
- Buiten deze solution klein testproject opgezet met de code uit de blog.
- Blijkt een zogenaamde npm voor de combinatie jasmine node te zijn (zie LINKS.txt 5).
- npm is de nuget voor node js.
- Ik heb een site gevonden die het gebruik van npm binnen visual studio beschrijft (zie LINKS.txt 6).
- Nu kan ik op de commandline in de juiste map de spec runnen met node jasmine-node spec/
- Nu het nodige experimenteren ontdekt dat je de spec niet kunnen runnen met Chutzpah (zie LINKS.txt 7).
- Wil de test in ieder geval kunnen starten vanuit visual studio.
- Ontdekt dat jasmine-node een wrapper is om de echte code (zie LINKS.txt 8).
node_modules/jasmine-node/lib/jasmine-node/cli.js
- Deze file als node js startup file gezet.
- In de project properties een . als script arguments gezet zodat hij weet waar hij de spec files moet vinden.
- Nu kan ik vanuit visual studio de tests starten en kun je ook een breakpoint in een spec zetten.
- De resultaten van de test zie je in het commandline venster wat opent en niet in de test explorer.
- Met het laden van de Bot.js wordt de bot ook meteen geinstantieerd en run hierop aangeroepen dat is lastig bij testen.
- Ik daarom heb het construeren van de bot en het aanroepen van run buiten de Bot geplaatst in Runner.js.
- Ik begreep eerst niet waarom de oorspronkelijke app bleef draaien terwijl er geen while lus of zo in zit.
- Blijkt dat Node js de app in leven houdt als er eventlisteners gekoppeld zijn en dat doet readline.createiIstance.
- Ik wil de Readline interface kunnen mocken.
- Ik daarom heb de aanroep van createInstance op readline ook buiten de Bot geplaatst en geinjecteerd.
- Als je met F5 het specs project start en alle test slagen wordt de app meteen weer gesloten.
- Via TOOLS => Options => Node.js tools => Wait for input when proccess exits normally aanvinken blijft hij wel open.
Doel bereikt
DOEL: Uitzoeken hoe je Node JS code schrijft in typescript.
- Het was even een puzzel waarom alleen een reference naar node.d.ts niet voldoende is om bij de Readline interface te komen.
- De readline module is als external module gedefinieerd (zie LINKS.txt 9).
- In een WebProject kun je via NuGet definitly type definities toevoegen.
- Voor een Node JS project kun je daarom TypeScript Definition manager (TSD) gebruiken.
- Installatie van TSD geeft een foutmelding bij mij.
- Handmatig type definitie toevoegen vanaf github als dit nodig is (zie LINKS.txt 10 en 11).
Doel bereikt
DOEL: Uitzoeken hoe we de app opknippen in testbare delen.
- Er wordt slechts 1 methode aangeroepen op Bot.js en daar zit bijna alle code in.
- Lijkt me handig Bot op te knippen in Bot en Commands.
- In Bot zit alleen de run method nog (en helper functions indien nodig).
- In Bot wordt een instantie van Commands geinjecteerd in Runner.js
- Commands bevat alle verschillende commando's als public methodes zodat we deze los kunnen testen.
- Het is handig om strings (of enum waardes) aan de commands van de Commands te koppelen (zie LINKS.txt 12)
- Misschien is het handig de logica van het opknippen van de data voor het commando ook in Commands te plaatsen.
- isACommand verwijderen en gewoon altijd getAnswer aanroepen en deze een result laten geven wat dus ook de fout string kan zijn.
- Misschien is het handig niet meer met lambda's de events te koppelen maar losse methods van te maken zodat ze los getest kunnen worden.
- run is dan alleen nog een method om events te koppelen.
DOEL: Schrijven van alle testen
- Wannneer je in een class een instanties van een andere class wilt kunnen maken, maar deze ook wilt kunnen mocken heb je een factory nodig.
- Dit is een truc voor het injecteren van een factory in typescript:
private AnswerFactory: (succes: boolean, value: string) => IAnswer
- Ik heb ontdekt dat je geen andReturn op een property van een spy kunt schrijven maar gewoon de properties kunt aanmaken op de spy:
var Answer: any = jasmine.createSpy('Answer');
Answer.succes = true;
- Wanneer je een class wilt mocken waarbinnen weer een instantie van een class zit waarop je dan een methode wilt aanroepen botProcess.stdout.write:
var botProcess: any = {
stdout: jasmine.createSpyObj('stdout', ['write']),
}
- Een poging gedaan om localisation in te voegen zien (zie LINKS.txt 13).
- De localisation bibliotheek lijkt vooral bedoeld te zijn in combinatie met express in Node JS
- Heb niet echt localisation nodig maar wil geen magic strings gebruiken.
- Besloten string constantes te gebruiken (zie LINKS.txt 14).
-- Regions en superRegions krijgen in de WarMap ook een 'add' functie ipv direct de property te kunnen aanroepen. region en superregion zelf zijn POJO's (alleen properties)'.
-- Imports in de code files gaan niet goed vanuit de unittests context (PossibleOwnersEnum). Kijken of dit mogelijk is door basepath te veranderen en anders full path gebruiken.
-- Heb het werkend gekregen door ./ te gebruiken.
--TS lint meldingen voor /map/ weggewerkt.
-- never use a for..in on a array: http://stackoverflow.com/questions/1963102/what-does-the-jslint-error-body-of-a-for-in-should-be-wrapped-in-an-if-statemen
DOEL: Statistieken kunnen bijhouden van de geschreven unittests
-- Proberen tools te vinden of anders zelf schrijven/handmatig tellen.
-- Via tools de code coverage kunnen berekenen, per geteste file of module.
-- TS lint meldingen per file of module bijhouden. Volgorde van impact bedenken voor de een aantal meldingen.
-- het aantal code regels en unittests regels tellen.
-- Jasmine-node-coverage is een grunt task die boven op een andere task istanbul de jasmine coverage kan rapporteren.
-- grunt geinstalleerd en als dev afhankelijkheid opgegeven in test project.
-- grunt-jasmine-node-coverage geinstalleerd en als dev afhankelijkheid opgegeven in test project.
-- gruntfile.js aangemaakt en configuratie toegevoegd.
-- werkend gekregen door een copy task te gebruiken om de ts te kopieren naar het spec project, in coverage/_source en coverage/_specs map.
-- Nog kijken of de spec files zelf kunnen worden ge-exclude.
-- De import statements in de gekopieerde files worden veranderd tijdens het kopiëren.
-- Code coverage via jasmine-node-coverage en grunt. config(gruntfile.js) goed zetten zodat er geen copy ofzo meer gebruikt hoeft te worden. lines of code toegevoegd e.d. kan via github.
- Bleek nog npm install -g grunt-cli op mijn machine te moeten doen om te kunnen runnen. Bleek ook nog de npm's te moeten installeren vanuit visual studio.
Doel bereikt.