Skip to content

Instantly share code, notes, and snippets.

@ccnokes
Last active October 11, 2022 14:18
Show Gist options
  • Save ccnokes/bd5b975dab213bb60b877e49754dd675 to your computer and use it in GitHub Desktop.
Save ccnokes/bd5b975dab213bb60b877e49754dd675 to your computer and use it in GitHub Desktop.
Online/offline event observable with RxJS (see comments below for a better, more up-to-date way of doing this)
const { Observable } = require('rxjs/Observable');
require('rxjs/add/observable/fromEvent');
require('rxjs/add/operator/map');
require('rxjs/add/observable/merge');
function createOnline$() {
//merge several events into one
return Observable.merge(
//use .map() to transform the returned Event type into a true/false value
Observable.fromEvent(window, 'offline').map(() => false),
Observable.fromEvent(window, 'online').map(() => true),
//start the stream with the current online status
Observable.create(sub => {
sub.next(navigator.onLine);
sub.complete(); //this one only emits once, so now we end it
})
);
}
// implement it
const onlineSub = createOnline$().subscribe(isOnline => console.log(isOnline));
onlineSub.unsubscribe();
Copy link

ghost commented Apr 24, 2020

Any samples for unit testing in angular, how do we trigger these events during testing.

Copy link

ghost commented Apr 24, 2020

@thecyberd3m0n did you manage to get unit testing for this

@FelixEhuan
Copy link

@kumar2live I don't know if you're still looking for a way to test this but you don't have to worry about online and offline behaviors, that's part of the browser, you only need to test your responses to different responses of that observable (i.e. Create a mock observable that emits true or false)

Copy link

ghost commented Sep 11, 2020

Thanks for responding, you are correct! I managed to use different RXJS events to handle this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment