64
Noury Bouraqadi & Dave Mason http://pharojs.org Tutorial Pharo-Based TDD for Javascript Apps

Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

NouryBouraqadi&DaveMasonhttp://pharojs.org

Tu to r i a l Pharo-Based TDD for Javascript Apps

Page 2: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RunonJavascript+

DevelopinPharo=

Page 3: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Tools+

Framework=

MITLicense

Page 4: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Why

•  DevelopinSmalltalkallthetimeJ

•  Portability

•  Front-end/standalone

•  ReuseexistingJSlibraries

•  Run-timeSpeed

?

Page 5: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Javascript0% 100%

Development Production

100% Pharo 0%

DevelopinPharo,RunonJavascript

Page 6: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Javascript0% 100%

Smalltalkclasses

100% Pharo 0%

DevelopinPharo,RunonJavascript

Setofclasses+entrypointclass

Page 7: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Javascript0% 100%

ConvertSmalltalktoJS

100% Pharo 0%

DevelopinPharo,RunonJavascript

Onlyclassesreachablefromthe

entrypointclass

Page 8: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

1.WriteTests

3.ExporttoJS2.Passthetests

Lifecyclewith

Javascript0% 100%

100% Pharo 0%

Page 9: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

CaseStudy:TDDofaPhysicsSimulation

•  ReuseanexistingJSLibrary•  Testinghybridapp=Pharo+Javascript•  LinkPharocodetoJSobjectsincludingDOM•  Pushingtoproduction

Page 10: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Backlog

•  Atstartup3bodiesè 1floorè 2fallingrectangles

•  "Addxxx"buttonsèAddsabody

•  "Reset"buttonèRemovesallbodies

Page 11: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

WriteTests100%Pharo&0%JS

PjWebAppTestCasesubclass:#PhysicsSimTestinstanceVariableNames:''classVariableNames:''package:'ESUG2018'

Page 12: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

WriteTests100%Pharo&0%JS

PjWebAppTestCasesubclass:#PhysicsSimTestinstanceVariableNames:''classVariableNames:''package:'ESUG2018'

Appshouldrunonawebbrowser

Page 13: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RunningtheTests~50%Pharo&~50%JS

app

Controller

engine

Page 14: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RunningtheTests~50%Pharo&~50%JS

PhysicsSimTest>>testAppInitialSetupselfassert:appbodiessizeequals:3.

Body1JSObject

Body2JSObject

Body3JSObject

Page 15: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RunningtheTests~50%Pharo&~50%JS

PhysicsSimTest>>testAppInitialSetupselfassert:appbodiessizeequals:3.

InstanceoftheentrypointclassPharoObject

Page 16: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RunningtheTests~50%Pharo&~50%JS

Missingentrypointclass

appClasssubclassResponsibility

Page 17: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

DefiningtheEntryPointClass

PjFileBasedWebAppsubclass:#PhysicsSiminstanceVariableNames:'engine'classVariableNames:''package:'ESUG2018'

WerelyonanexternalHTMLfile

Page 18: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

TestReferencesEntryPointClass

PhysicsSimTestclass>>appClass^PhysicsSim

Entrypointclass

Page 19: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

TestRequestsAppFolder

Page 20: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

TestRequestsAppFolder

FolderwhereHTML+otherfiles

arelocated

Page 21: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

HTMLFile=App'sView

...<buttonid="resetButton"class="green">Reset</button><divid="simulationView"></div>...<scriptsrc="js/matter.js"></script><scriptsrc="index.js"></script>...

Third-partyJSLibrary

Page 22: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

HTMLFile=App'sView

...<buttonid="resetButton"class="green">Reset</button><divid="simulationView"></div>...<scriptsrc="js/matter.js"></script><scriptsrc="js/index.js"></script>...

LinktoJSCodeGeneratedby

PharoJS

Page 23: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

HTMLFile=App'sView

...<buttonid="resetButton"class="green">Reset</button><divid="simulationView"></div>...<scriptsrc="js/matter.js"></script><scriptsrc="js/index.js"></script>...

NoBehavior!

Page 24: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

HTMLFile=App'sView

...<buttonid="resetButton"class="green">Reset</button><divid="simulationView"></div>...<scriptsrc="js/matter.js"></script><scriptsrc="js/index.js"></script>...

NoBehavior!

ID=toattachPharocode

Page 25: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RerunTests

PharoJSOpensHTMLfileinawebbrowser

Page 26: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RerunTests

PharoJSOpensHTMLfileinawebbrowser

NoSimulation!

Page 27: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RerunTests

Page 28: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheApp

PhysicsSim>>initializesuperinitialize.selfcreateAndStartEngine.selfsetupAndStartRendering.

PhysicsSim>>bodies^engineworldbodies

JSDoc/Examples PharoCode

Page 29: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheApp

PhysicsSim>>matterJsRoot^windowMatter

PhysicsSim>>createAndStartEngine|runner|engine:=selfmatterJsRootEnginecreate.runner:=selfmatterJsRootRunnercreate.selfmatterJsRootRunnerrun:runnerwith:engine

ProxytoJavascriptglobal

Page 30: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheApp

PhysicsSim>>matterJsRoot^windowMatter

PhysicsSim>>createAndStartEngine|runner|engine:=selfmatterJsRootEnginecreate.runner:=selfmatterJsRootRunnercreate.selfmatterJsRootRunnerrun:runnerwith:engine

PharoJSgeneratedaccessortoJSobjectproperty

Page 31: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheApp

PhysicsSim>>matterJsRoot^windowMatter

PhysicsSim>>createAndStartEngine|runner|engine:=selfmatterJsRootEnginecreate.runner:=selfmatterJsRootRunnercreate.selfmatterJsRootRunnerrun:runnerwith:engine

CallingJSmethodcreate()

Page 32: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheApp

PhysicsSim>>matterJsRoot^windowMatter

PhysicsSim>>createAndStartEngine|runner|engine:=selfmatterJsRootEnginecreate.runner:=selfmatterJsRootRunnercreate.selfmatterJsRootRunnerrun:runnerwith:engine

CallingJSmethodrun(runner,engine)

Page 33: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheAppPhysicsSim>>setupAndStartRendering|rendersimulationView|simulationView:=selfelementAt:#simulationView.render:=selfmatterJsRootRendercreate: {#element->simulationView. #engine->engine. #options->{#width->800. #height->600. #wireframes->false. #background->'transparent'}}asJsObject.

selfmatterJsRootRenderrun:render

Page 34: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheAppPhysicsSim>>setupAndStartRendering|rendersimulationView|simulationView:=selfelementAt:#simulationView.render:=selfmatterJsRootRendercreate: {#element->simulationView. #engine->engine. #options->{#width->800. #height->600. #wireframes->false. #background->'transparent'}}asJsObject.

selfmatterJsRootRenderrun:render

FindstheDOMelementwithID"SimulationView"

HTML

...<divid="simulationView"></div>...

Page 35: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheAppPhysicsSim>>setupAndStartRendering|rendersimulationView|simulationView:=selfelementAt:#simulationView.render:=selfmatterJsRootRendercreate: {#element->simulationView. #engine->engine. #options->{#width->800. #height->600. #wireframes->false. #background->'transparent'}}asJsObject.

selfmatterJsRootRenderrun:render

CreateaJSObjectfromaPharoDictionary

Page 36: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

DefiningLiteralJSObjectsinPharo

{#element->simulationView.#engine->engine.#options->{#width->800.#height->600.#wireframes->false.#background->'transparent'}

}asJsObject.

JSDoc/Examples PharoCode

{element:simulationView.engine:engine.options:{width:800.height:600.wireframes:false.background:'transparent'}

}

Javascriptcode Pharoequivalent

Page 37: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

RerunTests

Page 38: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

FixingtheApp

PhysicsSim>>initializesuperinitialize.selfcreateAndStartEngine.selfsetupAndStartRendering.selfaddInitialBodies

Page 39: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Bodies.rectangle(400,610,810,60,{isStatic:true});

CreatingMatterJSBodies

selfmatterJsRootBodiesrectangle:400y:610width:810height:60options:{ #isStatic->true}asJsObject.

JSDoc/Examples PharoCode

Javascriptcode Pharoequivalent

Page 40: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

1stTestPasses!

Page 41: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Morefeatures=ButtonHandling

Page 42: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Reset=DeleteMobileBodies

Page 43: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

HTMLIDforLinkingwithPharo

HTML...<buttonid="resetButton">Reset</button>...

Page 44: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

WriteTestsforResetButton

PhysicsSimTest>>testResetDeleteMobileBodiesOnlyselfclickElementById:#resetButton.selfassert:appbodiessizeequals:1.

HTML...<buttonid="resetButton">Reset</button>...

Page 45: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

WriteTestsforResetButton

PhysicsSimTest>>testResetDeleteMobileBodiesOnlyselfclickElementById:#resetButton.selfassert:appbodiessizeequals:1.

HTML...<buttonid="resetButton">Reset</button>...

PharotriggerseventonDOMobject!

Page 46: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

TestFails

Page 47: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

AddBehaviortoHTMLButton

PhysicsSim>>initialize...selfonClick:#resetButton do:[selfmatterJsRootWorld clear:engineworld keepStatic:true]

Page 48: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

AddBehaviortoHTMLButton

PhysicsSim>>initialize...selfonClick:#resetButton do:[selfmatterJsRootWorld clear:engineworld keepStatic:true]

HTMLID

Page 49: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

AddBehaviortoHTMLButton

PhysicsSim>>initialize...selfonClick:#resetButton do:[selfmatterJsRootWorld clear:engineworld keepStatic:true]

PharoBlockCalling

MatterJSLibrary

Page 50: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

AddBehaviortoHTMLButton

ValuePharoBlock

ClickonHTMLButton

Page 51: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

Lifecyclewith

Javascript0% 100%

100% Pharo 0%

3.ExporttoJS

1.WriteTests2.Passthetests

Page 52: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

ExportAppforProduction100%Javascript

Page 53: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

ExportAppforProduction100%Javascript

Page 54: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

ExportAppforProduction100%Javascript

Page 55: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

ExportedJSfile

Page 56: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

ExportedJSfile

...<scriptsrc="js/matter.js"></script><scriptsrc="js/index.js"></script>...

Page 57: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

http://pharojs.org/Demo/MatterJsDemo/index.html

Page 58: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

BeyondResearch!

Page 59: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

OpenSourcefortheRealWorld

PharoTradition!

Page 60: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

nootrix.com

Farmers Market

Page 61: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

nootrix.com

GPSNavigation

ZoomableMap

UpdateMarkers

Page 62: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

WhatNext?

•  Bettersupportformobileapps•  MigratetoPharo7

•  ImproveCodeExtraction

•  Middlewareforhybridapps

Thisafternoon!

Page 63: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

LearnmoreaboutPharoJS•  Web:http://pharojs.org– FAQ+...– ThanksESUGforthesupport

•  Slack:https://pharojs.slack.com/– Discussions

•  Twitter:https://twitter.com/pharojs– News– SubscriptiontoPharoJSSlack

Page 64: Tutorial Pharo-Based TDD for Javascript Appsesug.org/data/ESUG2018/02-Tuesday/01-PharoJS Pharo...PharoJS Opens HTML file in a web browser No Simulation! Rerun Tests Fixing the App

NouryBouraqadi&DaveMason

DevelopinPharoRunonJavascript

http://pharojs.org