SlideShare a Scribd company logo
TESTING RXJS USING MARBLES
within Angular
( Lightning talk )
BOUT ME
{
"name": "Ilia Idakiev",
"experience": [
"Developer / Founder @ HNS",
"Lecturer in 'Advanced JS' @ FMI",
"Contractor / Consultant",
"2 Angular Courses @ HB (2016 - 2017)",
"JavaScript Courses"
],
"involvedIn": [
"SofiaJS", "BeerJS", "Angular Sofia"
]
}
UNITTESTING
In computer programming, unit testing is a software testing method by
which individual units of source code, sets of one or more computer
program modules together with associated control data, usage
procedures, and operating procedures, are tested to determine whether
they are fit for use.
(wikipedia)
TESTING ANGULAR
• Jasmine - test framework that provides everything needed to write
basic tests.
• Karma - test runner for writing and running unit tests while
developing the application.
JASMINE SUITS - DESCRIBE
A test suite begins with a call to the global Jasmine function describe
with two parameters: a string and a function.The string is a name or
title for a spec suite - usually what is being tested.The function is a
block of code that implements the suite.
JASMINE SPECS - IT
Specs are defined by calling the global Jasmine function it, which, like
describe takes a string and a function.The string is the title of the spec
and the function is the spec, or test.
A spec contains one or more expectations that test the state of the
code.An expectation in Jasmine is an assertion that is either true or
false.A spec with all true expectations is a passing spec.A spec with
one or more false expectations is a failing spec.
JASMINE EXPECTATIONS - EXPECT
Expectations are built with the function expect which takes a value,
called the actual. It is chained with a Matcher function, which takes the
expected value.
JASMINETEST EXAMPLE
RXJS
RxJS is a library for reactive programming using Observables, to make it
easier to compose asynchronous or callback-based code.
https://github.com/ReactiveX/rxjs
HOTVS COLD OBSERVABLES
• Cold observables start running upon individual subscriptions and
values are not shared among subscribers.
• The hot observable sequence is shared among all subscribers.When
an observer subscribes to a hot observable sequence, it will get all
values in the stream that are emitted after it subscribes.
COLD
OBSERVABLE
EXAMPLE
HOT
OBSERVABLE
EXAMPLE
ANALOGIES
• Cold Observables - movies
• Hot Observables - live performances.
• Hot Observables replayed - live performances recorded on video.
( BehaviorSubject / ReplaySubject )
MARBLE DIAGRAMS
Marble diagrams are frequently used to explaining how certain
operators in Rx work.
MARBLE EXAMPLE
MORE MARBLE DIAGRAMS
http://rxmarbles.com
JASMINE-MARBLES
Library that provides marble testing helpers for RxJS and Jasmine
Marble tests use a specialized VirtualScheduler called the TestScheduler.
They enable us to test asynchronous operations in a synchronous and
dependable manner.
MARBLE SYNTAX
• "-" time: 10 "frames" of time passage.
• "|" complete: The successful completion of an observable.This is the observable producer signaling
complete()
• "#" error: An error terminating the observable.This is the observable producer signaling error()
• "a" any character: All other characters represent a value being emitted by the producure signaling next()
• "()" sync groupings: When multiple events need to single in the same frame synchronously, parenthesis are
used to group those events.You can group nexted values, a completion or an error in this manner.The
position of the initial ( determines the time at which its values are emitted.
• "^" subscription point: (hot observables only) shows the point at which the tested observables will be
subscribed to the hot observable.This is the "zero frame" for that observable, every frame before the ^ will
be negative.
BASIC METHODS
• hot(marbles: string, values?: object, error?: any) - creates a "hot" observable (a subject) that will behave as
though it's already "running" when the test begins.An interesting difference is that hot marbles allow a ^ character to
signal where the "zero frame" is.That is the point at which the subscription to observables being tested begins.
• cold(marbles: string, values?: object, error?: any) - creates a "cold" observable whose subscription starts when
the test begins.
• expectObservable(actual: Observable<T>)

.toBe(marbles: string, values?: object, error?: any) - schedules an assertion for when theTestScheduler
flushes.TheTestScheduler will automatically flush at the end of your jasmine it block.
• expectSubscriptions(actualSubscriptionLogs: SubscriptionLog[])

.toBe(subscriptionMarbles: string) - like expectObservable schedules an assertion for when the testScheduler
flushes. Both cold() and hot() return an observable with a property subscriptions of type SubscriptionLog[]. Give
subscriptions as parameter to expectSubscriptions to assert whether it matches the subscriptionsMarbles marble
diagram given in toBe(). Subscription marble diagrams are slightly different than Observable marble diagrams.
MARBLE EXAMPLES
• '-' or '------': Equivalent to Observable.never(), or an observable that never emits or completes
• '|': Equivalent to Observable.empty()
• '#': Equivalent to Observable.throw()
• '--a--':An observable that waits 20 "frames", emits value a and then never completes.
• '--a--b--|': On frame 20 emit a, on frame 50 emit b, and on frame 80, complete
• '--a--b--#': On frame 20 emit a, on frame 50 emit b, and on frame 80, error
• '-a-^-b--|': In a hot observable, on frame -20 emit a, then on frame 20 emit b, and on frame 50, complete.
• '--(abc)-|': on frame 20, emit a, b, and c, then on frame 40 complete
• '-----(a|)': on frame 50, emit a and complete.
EXAMPLE 1
EXAMPLE 2
SUBSCRIPTION MARBLE SYNTAX
• "-" time: 10 "frames" of the passage.
• "^" subscription point: shows the point in time at which a
subscription happen.
• "!" unsubscription point: shows the point in time at which a
subscription is unsubscribed.
EXAMPLE 3
ANGULAR DEMO
CONTACT
• GitHub - https://github/iliaidakiev (/slides/ - list of future and past events)
• Twitter - @ilia_idakiev
THANKYOU!
Ad

Recommended

PPTX
Reactive Java (GeeCON 2014)
Tomasz Kowalczewski
 
PPTX
Introduction to Reactive Java
Tomasz Kowalczewski
 
PDF
Streams, Streams Everywhere! An Introduction to Rx
Andrzej Sitek
 
PPTX
Flask & Flask-restx
ammaraslam18
 
PPTX
Intro to Functional Programming with RxJava
Mike Nakhimovich
 
PDF
rx-java-presentation
Mateusz Bukowicz
 
PDF
KubeCon 2018 - Running VM Workloads Side by Side with Container Workloads
loodse
 
PDF
Reactive programming with Rxjava
Christophe Marchal
 
PDF
Gatling @ Scala.Io 2013
slandelle
 
PDF
Reactive programming in Angular 2
Yakov Fain
 
PDF
Introduction to akka actors with java 8
Johan Andrén
 
PDF
VJUG24 - Reactive Integrations with Akka Streams
Johan Andrén
 
PDF
RxJava - introduction & design
allegro.tech
 
PDF
Quick tour to front end unit testing using jasmine
Gil Fink
 
ODP
Unit Testing and Coverage for AngularJS
Knoldus Inc.
 
PDF
Testing akka-actors
Knoldus Inc.
 
PPTX
Building an aws sdk for Perl - Granada Perl Workshop 2014
Jose Luis Martínez
 
PPTX
Advance JS and oop
Abuzer Firdousi
 
PPTX
Welcome Azure Functions 2. 0
Massimo Bonanni
 
PPTX
Paws: A Perl AWS SDK - YAPC Europe 2015
CAPSiDE
 
PPTX
Unit testing in JavaScript with Jasmine and Karma
Andrey Kolodnitsky
 
PDF
Building a chatbot – step by step
CodeOps Technologies LLP
 
PDF
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
Paweł Pikuła
 
ODP
Jquery- One slide completing all JQuery
Knoldus Inc.
 
PPTX
Programing for problem solving ( airline reservation system)
Home
 
PDF
Intro to front-end testing
Juriy Zaytsev
 
PPTX
Qtp training session IV
Aisha Mazhar
 
PPTX
Introduction to underscore.js
Jitendra Zaa
 
PPTX
Marble testing
Bruno Vollino
 
PDF
RxJava@DAUG
Maxim Volgin
 

More Related Content

What's hot (20)

PDF
Gatling @ Scala.Io 2013
slandelle
 
PDF
Reactive programming in Angular 2
Yakov Fain
 
PDF
Introduction to akka actors with java 8
Johan Andrén
 
PDF
VJUG24 - Reactive Integrations with Akka Streams
Johan Andrén
 
PDF
RxJava - introduction & design
allegro.tech
 
PDF
Quick tour to front end unit testing using jasmine
Gil Fink
 
ODP
Unit Testing and Coverage for AngularJS
Knoldus Inc.
 
PDF
Testing akka-actors
Knoldus Inc.
 
PPTX
Building an aws sdk for Perl - Granada Perl Workshop 2014
Jose Luis Martínez
 
PPTX
Advance JS and oop
Abuzer Firdousi
 
PPTX
Welcome Azure Functions 2. 0
Massimo Bonanni
 
PPTX
Paws: A Perl AWS SDK - YAPC Europe 2015
CAPSiDE
 
PPTX
Unit testing in JavaScript with Jasmine and Karma
Andrey Kolodnitsky
 
PDF
Building a chatbot – step by step
CodeOps Technologies LLP
 
PDF
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
Paweł Pikuła
 
ODP
Jquery- One slide completing all JQuery
Knoldus Inc.
 
PPTX
Programing for problem solving ( airline reservation system)
Home
 
PDF
Intro to front-end testing
Juriy Zaytsev
 
PPTX
Qtp training session IV
Aisha Mazhar
 
PPTX
Introduction to underscore.js
Jitendra Zaa
 
Gatling @ Scala.Io 2013
slandelle
 
Reactive programming in Angular 2
Yakov Fain
 
Introduction to akka actors with java 8
Johan Andrén
 
VJUG24 - Reactive Integrations with Akka Streams
Johan Andrén
 
RxJava - introduction & design
allegro.tech
 
Quick tour to front end unit testing using jasmine
Gil Fink
 
Unit Testing and Coverage for AngularJS
Knoldus Inc.
 
Testing akka-actors
Knoldus Inc.
 
Building an aws sdk for Perl - Granada Perl Workshop 2014
Jose Luis Martínez
 
Advance JS and oop
Abuzer Firdousi
 
Welcome Azure Functions 2. 0
Massimo Bonanni
 
Paws: A Perl AWS SDK - YAPC Europe 2015
CAPSiDE
 
Unit testing in JavaScript with Jasmine and Karma
Andrey Kolodnitsky
 
Building a chatbot – step by step
CodeOps Technologies LLP
 
Serverless cat detector workshop - cloudyna 2017 (16.12.2017)
Paweł Pikuła
 
Jquery- One slide completing all JQuery
Knoldus Inc.
 
Programing for problem solving ( airline reservation system)
Home
 
Intro to front-end testing
Juriy Zaytsev
 
Qtp training session IV
Aisha Mazhar
 
Introduction to underscore.js
Jitendra Zaa
 

Similar to Testing rx js using marbles within angular (20)

PPTX
Marble testing
Bruno Vollino
 
PDF
RxJava@DAUG
Maxim Volgin
 
PDF
如何「畫圖」寫測試 - RxJS Marble Test
名辰 洪
 
PPTX
Angular observables for fun and profit
Gil Steiner
 
PDF
Marble Testing RxJS streams
Ilia Idakiev
 
PPTX
RxJS and Reactive Programming - Modern Web UI - May 2015
Ben Lesh
 
PDF
Angular Advanced Workshop (+ Challenges)
Georgios Kaleadis
 
PPTX
Functional Reactive Programming (FRP): Working with RxJS
Oswald Campesato
 
PDF
RxJava@Android
Maxim Volgin
 
PPTX
Rxjs marble-testing
Christoffer Noring
 
PDF
Observables in Angular
Knoldus Inc.
 
PPTX
Modern Java in Action: learn all the things Java can do
Manning Publications
 
PPTX
Samuele Resca - REACTIVE PROGRAMMING, DAMN. IT IS NOT ABOUT REACTJS - Codemot...
Codemotion
 
PPTX
Reactive Programming and RxJS
Denis Gorbunov
 
PPTX
Luis Atencio on RxJS
Luis Atencio
 
PPTX
Introduction to RxJS
Abul Hasan
 
PPTX
From zero to hero with the reactive extensions for JavaScript
Maurice De Beijer [MVP]
 
PPTX
Introduction to RxJava on Android
Chris Arriola
 
PPTX
RxJS In-Depth - AngularConnect 2015
Ben Lesh
 
PDF
RxJS 5 in Depth
C4Media
 
Marble testing
Bruno Vollino
 
RxJava@DAUG
Maxim Volgin
 
如何「畫圖」寫測試 - RxJS Marble Test
名辰 洪
 
Angular observables for fun and profit
Gil Steiner
 
Marble Testing RxJS streams
Ilia Idakiev
 
RxJS and Reactive Programming - Modern Web UI - May 2015
Ben Lesh
 
Angular Advanced Workshop (+ Challenges)
Georgios Kaleadis
 
Functional Reactive Programming (FRP): Working with RxJS
Oswald Campesato
 
RxJava@Android
Maxim Volgin
 
Rxjs marble-testing
Christoffer Noring
 
Observables in Angular
Knoldus Inc.
 
Modern Java in Action: learn all the things Java can do
Manning Publications
 
Samuele Resca - REACTIVE PROGRAMMING, DAMN. IT IS NOT ABOUT REACTJS - Codemot...
Codemotion
 
Reactive Programming and RxJS
Denis Gorbunov
 
Luis Atencio on RxJS
Luis Atencio
 
Introduction to RxJS
Abul Hasan
 
From zero to hero with the reactive extensions for JavaScript
Maurice De Beijer [MVP]
 
Introduction to RxJava on Android
Chris Arriola
 
RxJS In-Depth - AngularConnect 2015
Ben Lesh
 
RxJS 5 in Depth
C4Media
 
Ad

More from Ilia Idakiev (18)

PDF
No more promises lets RxJS 2 Edit
Ilia Idakiev
 
PDF
Enterprise State Management with NGRX/platform
Ilia Idakiev
 
PDF
Deep Dive into Zone.JS
Ilia Idakiev
 
PDF
RxJS Schedulers - Controlling Time
Ilia Idakiev
 
PDF
Creating lightweight JS Apps w/ Web Components and lit-html
Ilia Idakiev
 
PDF
No More Promises! Let's RxJS!
Ilia Idakiev
 
PDF
Deterministic JavaScript Applications
Ilia Idakiev
 
PDF
Web Components Everywhere
Ilia Idakiev
 
PDF
Building Reusable Custom Elements With Angular
Ilia Idakiev
 
PDF
State management for enterprise angular applications
Ilia Idakiev
 
PDF
Offline progressive web apps with NodeJS and React
Ilia Idakiev
 
PDF
Predictable reactive state management for enterprise apps using NGRX/platform
Ilia Idakiev
 
PDF
Angular server side rendering with NodeJS - In Pursuit Of Speed
Ilia Idakiev
 
PDF
Angular Offline Progressive Web Apps With NodeJS
Ilia Idakiev
 
PDF
Introduction to Offline Progressive Web Applications
Ilia Idakiev
 
PDF
Reflective injection using TypeScript
Ilia Idakiev
 
PDF
Zone.js
Ilia Idakiev
 
PDF
Predictable reactive state management - ngrx
Ilia Idakiev
 
No more promises lets RxJS 2 Edit
Ilia Idakiev
 
Enterprise State Management with NGRX/platform
Ilia Idakiev
 
Deep Dive into Zone.JS
Ilia Idakiev
 
RxJS Schedulers - Controlling Time
Ilia Idakiev
 
Creating lightweight JS Apps w/ Web Components and lit-html
Ilia Idakiev
 
No More Promises! Let's RxJS!
Ilia Idakiev
 
Deterministic JavaScript Applications
Ilia Idakiev
 
Web Components Everywhere
Ilia Idakiev
 
Building Reusable Custom Elements With Angular
Ilia Idakiev
 
State management for enterprise angular applications
Ilia Idakiev
 
Offline progressive web apps with NodeJS and React
Ilia Idakiev
 
Predictable reactive state management for enterprise apps using NGRX/platform
Ilia Idakiev
 
Angular server side rendering with NodeJS - In Pursuit Of Speed
Ilia Idakiev
 
Angular Offline Progressive Web Apps With NodeJS
Ilia Idakiev
 
Introduction to Offline Progressive Web Applications
Ilia Idakiev
 
Reflective injection using TypeScript
Ilia Idakiev
 
Zone.js
Ilia Idakiev
 
Predictable reactive state management - ngrx
Ilia Idakiev
 
Ad

Recently uploaded (20)

PPTX
Advance Doctor Appointment Booking App With Online Payment
AxisTechnolabs
 
PDF
Digital Transformation: Automating the Placement of Medical Interns
Safe Software
 
PDF
OpenChain Webinar - AboutCode - Practical Compliance in One Stack – Licensing...
Shane Coughlan
 
PDF
Introduction to Agile Frameworks for Product Managers.pdf
Ali Vahed
 
PPTX
Test Case Design Techniques – Practical Examples & Best Practices in Software...
Muhammad Fahad Bashir
 
PPTX
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
dheeodoo
 
PPTX
declaration of Variables and constants.pptx
meemee7378
 
PDF
University Campus Navigation for All - Peak of Data & AI
Safe Software
 
PDF
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
mary rojas
 
PDF
Decipher SEO Solutions for your startup needs.
mathai2
 
PDF
Humans vs AI Call Agents - Qcall.ai's Special Report
Udit Goenka
 
PPTX
arctitecture application system design os dsa
za241967
 
PDF
Building Geospatial Data Warehouse for GIS by GIS with FME
Safe Software
 
PPTX
Simplify Insurance Regulations with Compliance Management Software
Insurance Tech Services
 
PDF
Which Hiring Management Tools Offer the Best ROI?
HireME
 
PDF
Automated Testing and Safety Analysis of Deep Neural Networks
Lionel Briand
 
PDF
Why Edge Computing Matters in Mobile Application Tech.pdf
IMG Global Infotech
 
DOCX
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
IFI Techsolutions
 
PPTX
Sap basis role in public cloud in s/4hana.pptx
htmlprogrammer987
 
DOCX
Zoho Creator Solution for EI by Elsner Technologies.docx
Elsner Technologies Pvt. Ltd.
 
Advance Doctor Appointment Booking App With Online Payment
AxisTechnolabs
 
Digital Transformation: Automating the Placement of Medical Interns
Safe Software
 
OpenChain Webinar - AboutCode - Practical Compliance in One Stack – Licensing...
Shane Coughlan
 
Introduction to Agile Frameworks for Product Managers.pdf
Ali Vahed
 
Test Case Design Techniques – Practical Examples & Best Practices in Software...
Muhammad Fahad Bashir
 
ERP Systems in the UAE: Driving Business Transformation with Smart Solutions
dheeodoo
 
declaration of Variables and constants.pptx
meemee7378
 
University Campus Navigation for All - Peak of Data & AI
Safe Software
 
Why Every Growing Business Needs a Staff Augmentation Company IN USA.pdf
mary rojas
 
Decipher SEO Solutions for your startup needs.
mathai2
 
Humans vs AI Call Agents - Qcall.ai's Special Report
Udit Goenka
 
arctitecture application system design os dsa
za241967
 
Building Geospatial Data Warehouse for GIS by GIS with FME
Safe Software
 
Simplify Insurance Regulations with Compliance Management Software
Insurance Tech Services
 
Which Hiring Management Tools Offer the Best ROI?
HireME
 
Automated Testing and Safety Analysis of Deep Neural Networks
Lionel Briand
 
Why Edge Computing Matters in Mobile Application Tech.pdf
IMG Global Infotech
 
Enable Your Cloud Journey With Microsoft Trusted Partner | IFI Tech
IFI Techsolutions
 
Sap basis role in public cloud in s/4hana.pptx
htmlprogrammer987
 
Zoho Creator Solution for EI by Elsner Technologies.docx
Elsner Technologies Pvt. Ltd.
 

Testing rx js using marbles within angular

  • 1. TESTING RXJS USING MARBLES within Angular ( Lightning talk )
  • 2. BOUT ME { "name": "Ilia Idakiev", "experience": [ "Developer / Founder @ HNS", "Lecturer in 'Advanced JS' @ FMI", "Contractor / Consultant", "2 Angular Courses @ HB (2016 - 2017)", "JavaScript Courses" ], "involvedIn": [ "SofiaJS", "BeerJS", "Angular Sofia" ] }
  • 3. UNITTESTING In computer programming, unit testing is a software testing method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures, are tested to determine whether they are fit for use. (wikipedia)
  • 4. TESTING ANGULAR • Jasmine - test framework that provides everything needed to write basic tests. • Karma - test runner for writing and running unit tests while developing the application.
  • 5. JASMINE SUITS - DESCRIBE A test suite begins with a call to the global Jasmine function describe with two parameters: a string and a function.The string is a name or title for a spec suite - usually what is being tested.The function is a block of code that implements the suite.
  • 6. JASMINE SPECS - IT Specs are defined by calling the global Jasmine function it, which, like describe takes a string and a function.The string is the title of the spec and the function is the spec, or test. A spec contains one or more expectations that test the state of the code.An expectation in Jasmine is an assertion that is either true or false.A spec with all true expectations is a passing spec.A spec with one or more false expectations is a failing spec.
  • 7. JASMINE EXPECTATIONS - EXPECT Expectations are built with the function expect which takes a value, called the actual. It is chained with a Matcher function, which takes the expected value.
  • 9. RXJS RxJS is a library for reactive programming using Observables, to make it easier to compose asynchronous or callback-based code. https://github.com/ReactiveX/rxjs
  • 10. HOTVS COLD OBSERVABLES • Cold observables start running upon individual subscriptions and values are not shared among subscribers. • The hot observable sequence is shared among all subscribers.When an observer subscribes to a hot observable sequence, it will get all values in the stream that are emitted after it subscribes.
  • 13. ANALOGIES • Cold Observables - movies • Hot Observables - live performances. • Hot Observables replayed - live performances recorded on video. ( BehaviorSubject / ReplaySubject )
  • 14. MARBLE DIAGRAMS Marble diagrams are frequently used to explaining how certain operators in Rx work.
  • 17. JASMINE-MARBLES Library that provides marble testing helpers for RxJS and Jasmine Marble tests use a specialized VirtualScheduler called the TestScheduler. They enable us to test asynchronous operations in a synchronous and dependable manner.
  • 18. MARBLE SYNTAX • "-" time: 10 "frames" of time passage. • "|" complete: The successful completion of an observable.This is the observable producer signaling complete() • "#" error: An error terminating the observable.This is the observable producer signaling error() • "a" any character: All other characters represent a value being emitted by the producure signaling next() • "()" sync groupings: When multiple events need to single in the same frame synchronously, parenthesis are used to group those events.You can group nexted values, a completion or an error in this manner.The position of the initial ( determines the time at which its values are emitted. • "^" subscription point: (hot observables only) shows the point at which the tested observables will be subscribed to the hot observable.This is the "zero frame" for that observable, every frame before the ^ will be negative.
  • 19. BASIC METHODS • hot(marbles: string, values?: object, error?: any) - creates a "hot" observable (a subject) that will behave as though it's already "running" when the test begins.An interesting difference is that hot marbles allow a ^ character to signal where the "zero frame" is.That is the point at which the subscription to observables being tested begins. • cold(marbles: string, values?: object, error?: any) - creates a "cold" observable whose subscription starts when the test begins. • expectObservable(actual: Observable<T>)
 .toBe(marbles: string, values?: object, error?: any) - schedules an assertion for when theTestScheduler flushes.TheTestScheduler will automatically flush at the end of your jasmine it block. • expectSubscriptions(actualSubscriptionLogs: SubscriptionLog[])
 .toBe(subscriptionMarbles: string) - like expectObservable schedules an assertion for when the testScheduler flushes. Both cold() and hot() return an observable with a property subscriptions of type SubscriptionLog[]. Give subscriptions as parameter to expectSubscriptions to assert whether it matches the subscriptionsMarbles marble diagram given in toBe(). Subscription marble diagrams are slightly different than Observable marble diagrams.
  • 20. MARBLE EXAMPLES • '-' or '------': Equivalent to Observable.never(), or an observable that never emits or completes • '|': Equivalent to Observable.empty() • '#': Equivalent to Observable.throw() • '--a--':An observable that waits 20 "frames", emits value a and then never completes. • '--a--b--|': On frame 20 emit a, on frame 50 emit b, and on frame 80, complete • '--a--b--#': On frame 20 emit a, on frame 50 emit b, and on frame 80, error • '-a-^-b--|': In a hot observable, on frame -20 emit a, then on frame 20 emit b, and on frame 50, complete. • '--(abc)-|': on frame 20, emit a, b, and c, then on frame 40 complete • '-----(a|)': on frame 50, emit a and complete.
  • 23. SUBSCRIPTION MARBLE SYNTAX • "-" time: 10 "frames" of the passage. • "^" subscription point: shows the point in time at which a subscription happen. • "!" unsubscription point: shows the point in time at which a subscription is unsubscribed.
  • 26. CONTACT • GitHub - https://github/iliaidakiev (/slides/ - list of future and past events) • Twitter - @ilia_idakiev