RxJs Book
  • Introduction
  • Summary
    • Why RxJS?
    • RxJS Design Guidelines
      • Introduction
      • When To Use RxJS
      • The RxJS Contract
      • Using RxJS
      • Operator Implementations
    • Getting Started With RxJS
      • What Are The Reactive Extensions?
      • Exploring Major Concepts In RxJS
      • Creating And Querying Observable Sequences
        • Creating And Subscribing To Simple Observable Sequences
        • Bridging To Events
        • Bridging To Callbacks
        • Bridging To Promises
        • Generators And Observable Sequences
        • Querying Observable Sequences
        • Error Handling With Observable Sequences
        • Transducers With Observable Sequences
        • Backpressure With Observable Sequences
        • Operators By Category
      • Subjects
      • Scheduling And Concurrency
      • Testing And Debugging
      • Implementing Your Own Operators
    • How Do I...?
      • How Do I Wrap An Existing API?
      • How Do I Integrate jQuery With RxJS?
      • How Do I Integrate Angular.js With RxJS?
      • How Do I Create A Simple Event Emitter?
    • Mapping RxJS From Different Libraries
      • For Bacon.js Users
      • For Async.js Users
    • Config
      • Promise
      • useNativeEvents
    • Helpers
      • defaultComparer
      • defaultSubComparer
      • defaultError
      • identity
      • just
      • isPromise
      • noop
      • pluck
    • Observable
      • Observable Methods
        • amb
        • case
        • catch
        • combineLatest
        • concat
        • create
        • defer
        • empty
        • for | forIn
        • forkJoin
        • from
        • fromCallback
        • fromEvent
        • fromEventPattern
        • fromNodeCallback
        • fromPromise
        • generate
        • generateWithAbsoluteTime
        • generateWithRelativeTime
        • if
        • interval
        • isObservable
        • just | return
        • merge
        • mergeDelayError
        • never
        • of
        • ofWithScheduler
        • onErrorResumeNext
        • pairs
        • range
        • repeat
        • spawn
        • start
        • startAsync
        • throw
        • timer
        • toAsync
        • using
        • when
        • while | whileDo
        • wrap
        • zip
      • Observable Instance Methods
        • amb
        • and
        • asObservable
        • average
        • buffer
        • bufferWithCount
        • bufferWithTime
        • bufferWithTimeOrCount
        • catch
        • combineLatest
        • concat
        • concatAll
        • concatMapObserver | selectConcatObserver
        • controlled
        • count
        • debounce
        • defaultIfEmpty
        • delay
        • delaySubscription
        • dematerialize
        • distinct
        • distinctUntilChanged
        • do | doAction | tap
        • doOnCompleted | tapOnCompleted
        • doOnError | tapOnError
        • doOnNext | tapOnNext
        • doWhile
        • elementAt
        • every
        • expand
        • extend | manySelect
        • filter | where
        • finally
        • find
        • findIndex
        • first
        • flatMap | selectMany
        • flatMapConcat | concatMap
        • flatMapFirst | selectSwitchFirst
        • flatMapLatest
        • flatMapObserver | selectManyObserver
        • flatMapWithMaxConcurrent
        • forkJoin
        • groupBy
        • groupByUntil
        • groupJoin
        • ignoreElements
        • includes
        • indexOf
        • isEmpty
        • join
        • jortSort
        • jortSortUntil
        • last
        • lastIndexOf
        • let | letBind
        • map | select
        • materialize
        • max
        • maxBy
        • merge
        • mergeAll
        • min
        • minBy
        • multicast
        • observeOn
        • onErrorResumeNext
        • pairwise
        • partition
        • pausable
        • pausableBuffered
        • pipe
        • pluck
        • publish
        • publishLast
        • publishValue
        • reduce
        • repeat
        • replay
        • retry
        • retryWhen
        • scan
        • sequenceEqual
        • share
        • shareReplay
        • shareValue
        • single
        • singleInstance
        • skip
        • skipLast
        • skipLastWithTime
        • skipUntil
        • skipUntilWithTime
        • skipWhile
        • skipWithTime
        • slice
        • some
        • startWith
        • subscribe | forEach
        • subscribeOn
        • subscribeOnCompleted
        • subscribeOnError
        • subscribeOnNext
        • sum
        • switch
        • switchFirst
        • take
        • takeLast
        • takeLastBuffer
        • takeLastBufferWithTime
        • takeLastWithTime
        • takeUntil
        • takeUntilWithTime
        • takeWhile
        • takeWithTime
        • thenDo
        • throttle
        • throttleLatest | sample
        • timeInterval
        • timeout
        • timestamp
        • toArray
        • toMap
        • toPromise
        • toSet
        • transduce
        • window
        • windowWithCount
        • windowWithTime
        • windowWithTimeOrCount
        • withLatestFrom
        • zip
        • zipIterable
    • Observer
      • Observer Methods
        • create
        • fromNotifier
      • Observer Instance Methods
        • asObserver
        • checked
        • notifyOn
        • onCompleted
        • onError
        • onNext
        • toNotifier
    • Notification
      • Notification Methods
        • createOnNext
        • createOnError
        • createOnCompleted
      • Notification Instance Methods
        • accept
        • toObservable
      • Notification Properties
        • exception
        • hasValue
        • kind
        • value
    • Subjects
      • Rx.AsyncSubject
      • Rx.BehaviorSubject
      • Rx.ReplaySubject
      • Rx.Subject
    • Schedulers
      • Rx.HistoricalScheduler
      • Rx.Scheduler
      • Rx.VirtualTimeScheduler
    • Disposables
      • Rx.CompositeDisposable
      • Rx.Disposable
      • Rx.RefCountDisposable
      • Rx.SerialDisposable
      • Rx.SingleAssignmentDisposable
    • Testing
      • Rx.ReactiveTest
      • Rx.Recorded
      • Rx.Subscription
      • Rx.TestScheduler
    • Bindings
      • DOM
        • Ajax
          • ajax
          • ajaxCold
          • get
          • get_Json
          • post
        • JSONP
          • jsonpRequest
          • jsonpRequestCold
        • Web Sockets
          • fromWebSocket
        • Web Workers
          • fromWebWorker
        • Mutation Observers
          • fromMutationObserver
        • Geolocation
          • getCurrentPosition
          • watchPosition
        • Schedulers
          • requestAnimationFrame
          • mutationObserver
      • jQuery
      • AngularJS
        • Factories
          • rx
          • observeOnScope
        • Observable Methods
          • safeApply
        • $rootScope Methods
          • $toObservable
          • $eventToObservable
          • $createObservableFunction
      • Facebook React
      • Ractive.js
      • Node.js
        • Callback Handlers
          • fromCallback
          • fromNodeCallback
        • Event Handlers
          • fromEvent
          • toEventEmitter
        • Stream Handlers
          • fromStream
          • fromReadableStream
          • fromWritableStream
          • fromTransformStream
          • writeToStream
  • Recipes
  • Which Operator do I use?
    • Creation Operators
    • Instance Operators
Powered by GitBook
On this page
  • Usage ##
  • Location
  • TestScheduler Constructor ##
  • TestScheduler Instance Methods ##
  • Inherited Classes ##
  • TestScheduler Constructor ##
  • Rx.TestScheduler()
  • Location
  • TestScheduler Instance Methods ##
  • Rx.TestScheduler.prototype.createColdObservable(...args)
  • Arguments
  • Location
  • Rx.TestScheduler.prototype.createHotObservable(...args)
  • Arguments
  • Location
  • Rx.TestScheduler.prototype.createObserver()
  • Location
  • Rx.TestScheduler.prototype.startWithCreate(create)
  • Arguments
  • Location
  • Rx.TestScheduler.prototype.startWithDispose(create, disposed)
  • Arguments
  • Location
  • Rx.TestScheduler.prototype.startWithTiming(create, created, subscribed, disposed)
  • Arguments
  • Location

Was this helpful?

  1. Summary
  2. Testing

Rx.TestScheduler

Virtual time scheduler used for testing applications and libraries built using Reactive Extensions. This inherits from the Rx.TestScheduler class.

Usage ##

The following shows an example of using the Rx.TestScheduler. In order to make the end comparisons work, you must implement a collection assert, for example here using QUnit.

function createMessage(actual, expected) {
    return 'Expected: [' + expected.toString() + ']\r\nActual: [' + actual.toString() + ']';
}

// Using QUnit testing for assertions
var collectionAssert = {
    assertEqual: function (expected, actual) {
        var comparer = Rx.Internals.isEqual,
            isOk = true;

        if (expected.length !== actual.length) {
            ok(false, 'Not equal length. Expected: ' + expected.length + ' Actual: ' + actual.length);
            return;
        }

        for(var i = 0, len = expected.length; i < len; i++) {
            isOk = comparer(expected[i], actual[i]);
            if (!isOk) {
                break;
            }
        }

        ok(isOk, createMessage(expected, actual));
    }
};

var onNext = Rx.ReactiveTest.onNext,
    onCompleted = Rx.ReactiveTest.onCompleted,
    subscribe = Rx.ReactiveTest.subscribe;

var scheduler = new Rx.TestScheduler();

// Create hot observable which will start firing
var xs = scheduler.createHotObservable(
    onNext(150, 1),
    onNext(210, 2),
    onNext(220, 3),
    onCompleted(230)
);

// Note we'll start at 200 for subscribe, hence missing the 150 mark
var res = scheduler.startWithCreate(function () {
    return xs.map(function (x) { return x * x });
});

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
    onNext(210, 4),
    onNext(220, 9),
    onCompleted(230)
]);

// Check for subscribe/unsubscribe
collectionAssert.assertEqual(xs.subscriptions, [
    subscribe(200, 230)
]);

Location

  • rx.testing.js

TestScheduler Constructor ##

TestScheduler Instance Methods ##

Inherited Classes ##

TestScheduler Constructor ##

Rx.TestScheduler()

Creates a new virtual time test scheduler.

Example

var onNext = Rx.ReactiveTest.onNext,
    onCompleted = Rx.ReactiveTest.onCompleted;

var scheduler = new Rx.TestScheduler();

// Create hot observable which will start firing
var xs = scheduler.createHotObservable(
    onNext(150, 1),
    onNext(210, 2),
    onNext(220, 3),
    onCompleted(230)
);

// Note we'll start at 200 for subscribe, hence missing the 150 mark
var res = scheduler.startWithCreate(function () {
    return xs.map(function (x) { return x * x });
});

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
    onNext(210, 4),
    onNext(220, 9),
    onCompleted(230)
]);

// Check for subscribe/unsubscribe
collectionAssert.assertEqual(xs.subscriptions, [
    subscribe(200, 230)
]);

Location

  • rx.testing.js

TestScheduler Instance Methods ##

Rx.TestScheduler.prototype.createColdObservable(...args)

Creates a cold observable using the specified timestamped notification messages.

Arguments

  1. args (Arguments): An arguments array of Recorded objects from Rx.ReactiveTest.onNext, Rx.ReactiveTest.onError, and Rx.ReactiveTest.onCompleted methods.

Returns

(Observable): Cold observable sequence that can be used to assert the timing of subscriptions and notifications.

Example

var onNext = Rx.ReactiveTest.onNext,
    onCompleted = Rx.ReactiveTest.onCompleted;

var scheduler = new Rx.TestScheduler();

// Create cold observable with offset from subscribe time
var xs = scheduler.createColdObservable(
    onNext(150, 1),
    onNext(200, 2),
    onNext(250, 3),
    onCompleted(300)
);

// Note we'll start at 200 for subscribe
var res = scheduler.startWithCreate(function () {
    return xs.filter(function (x) { return x % 2 === 0; });
});

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
    onNext(400, 2),
    onCompleted(500)
]);

// Check for subscribe/unsubscribe
collectionAssert.assertEqual(xs.subscriptions, [
    subscribe(200, 500)
]);

Location

  • rx.testing.js

Rx.TestScheduler.prototype.createHotObservable(...args)

Creates a hot observable using the specified timestamped notification messages.

Arguments

  1. args (Arguments): An arguments array of Recorded objects from Rx.ReactiveTest.onNext, Rx.ReactiveTest.onError, and Rx.ReactiveTest.onCompleted methods.

Returns

(Observable): Hot observable sequence that can be used to assert the timing of subscriptions and notifications.

Example

var onNext = Rx.ReactiveTest.onNext,
    onCompleted = Rx.ReactiveTest.onCompleted;

var scheduler = new Rx.TestScheduler();

// Create hot observable which will start firing
var xs = scheduler.createHotObservable(
    onNext(150, 1),
    onNext(210, 2),
    onNext(220, 3),
    onCompleted(230)
);

// Note we'll start at 200 for subscribe, hence missing the 150 mark
var res = scheduler.startWithCreate(function () {
    return xs.map(function (x) { return x * x });
});

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
    onNext(210, 4),
    onNext(220, 9),
    onCompleted(230)
]);

// Check for subscribe/unsubscribe
collectionAssert.assertEqual(xs.subscriptions, [
    subscribe(200, 230)
]);

Location

  • rx.testing.js

Rx.TestScheduler.prototype.createObserver()

Creates an observer that records received notification messages and timestamps those.

Returns

(Observer): Observer that can be used to assert the timing of received notifications.

Example

var onNext = Rx.ReactiveTest.onNext;

var scheduler = new Rx.TestScheduler();

var d = new Rx.SerialDisposable();

var xs = Rx.Observable.return(42, scheduler);

var res = scheduler.createObserver();

scheduler.scheduleAbsolute(100, function () {
    d.setDisposable(xs.subscribe(
        function (x) {
            d.dispose();
            res.onNext(x);
        },
        res.onError.bind(res),
        res.onCompleted.bind(res)
    );
});

scheduler.start();

collectionAssert.assertEqual(res.messages, [
    onNext(101, 42)
]);

Location

  • rx.testing.js

Rx.TestScheduler.prototype.startWithCreate(create)

Starts the test scheduler and uses default virtual times to invoke the factory function, to subscribe to the resulting sequence, and to dispose the subscription.

Arguments

  1. create (Function): Factory method to create an observable sequence.

Returns

(Observer): Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active.

Example

var onNext = Rx.ReactiveTest.onNext,
    onCompleted = Rx.ReactiveTest.onCompleted;

var scheduler = new Rx.TestScheduler();

// Create cold observable with offset from subscribe time
var xs = scheduler.createColdObservable(
    onNext(150, 1),
    onNext(200, 2),
    onNext(250, 3),
    onCompleted(300)
);

// Note we'll start at 200 for subscribe
var res = scheduler.startWithCreate(function () {
    return xs.filter(function (x) { return x % 2 === 0; });
});

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
    onNext(400, 2),
    onCompleted(500)
]);

// Check for subscribe/unsubscribe
collectionAssert.assertEqual(xs.subscriptions, [
    subscribe(200, 500)
]);

Location

  • rx.testing.js

Rx.TestScheduler.prototype.startWithDispose(create, disposed)

Starts the test scheduler and uses the specified virtual time to dispose the subscription to the sequence obtained through the factory function. Default virtual times are used for factory invocation and sequence subscription.

Arguments

  1. create (Function): Factory method to create an observable sequence.

  2. disposed (Number): Virtual time at which to dispose the subscription.

Returns

(Observer): Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active.

Example

var onNext = Rx.ReactiveTest.onNext,
    onCompleted = Rx.ReactiveTest.onCompleted;

var scheduler = new Rx.TestScheduler();

// Create hot observable which will start firing
var xs = scheduler.createHotObservable(
    onNext(150, 1),
    onNext(210, 2),
    onNext(220, 3),
    onCompleted(230)
);

// Note we'll start at 200 for subscribe, hence missing the 150 mark
var res = scheduler.startWithDispose(
    function () {
        return xs.map(function (x) { return x * x });
    },
    215 /* Dispose at 215 */
);

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
    onNext(210, 4),
    onCompleted(215)
]);

// Check for subscribe/unsubscribe
collectionAssert.assertEqual(xs.subscriptions, [
    subscribe(200, 215)
]);

Location

  • rx.testing.js

Rx.TestScheduler.prototype.startWithTiming(create, created, subscribed, disposed)

Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription.

Arguments

  1. create (Function): Factory method to create an observable sequence.

  2. created (Number): Virtual time at which to invoke the factory to create an observable sequence.

  3. subscribed (Number): Virtual time at which to subscribe to the created observable sequence.

  4. disposed (Number): Virtual time at which to dispose the subscription.

Returns

(Observer): Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active.

Example

var onNext = Rx.ReactiveTest.onNext,
    onCompleted = Rx.ReactiveTest.onCompleted;

var scheduler = new Rx.TestScheduler();

// Create hot observable which will start firing
var xs = scheduler.createHotObservable(
    onNext(150, 1),
    onNext(210, 2),
    onNext(260, 3),
    onNext(310, 4),
    onCompleted(360)
);

// Note we'll start at 200 for subscribe, hence missing the 150 mark
var res = scheduler.startWithTiming(
    function () {
        return xs.map(function (x) { return x * x });
    },
    100, /* Create at 100    */
    200, /* Subscribe at 200 */
    300  /* Dispose at 300   */
);

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
    onNext(210, 4),
    onNext(260, 9),
    onCompleted(300)
]);

// Check for subscribe/unsubscribe
collectionAssert.assertEqual(xs.subscriptions, [
    subscribe(200, 300)
]);

Location

  • rx.testing.js

PreviousRx.SubscriptionNextBindings

Last updated 5 years ago

Was this helpful?

Rx.VirtualTimeScheduler
constructor
createColdObservable
createHotObservable
createObserver
startWithCreate
startWithDispose
startWithTiming
Ⓢ
#
Ⓢ
#
Ⓢ
#
Ⓢ
#
Ⓢ
#
Ⓢ
#
Ⓢ
#