Skip to content

Latest commit

 

History

History
527 lines (389 loc) · 18.7 KB

testscheduler.md

File metadata and controls

527 lines (389 loc) · 18.7 KB

Rx.TestScheduler class

Virtual time scheduler used for testing applications and libraries built using Reactive Extensions. This inherits from the Rx.VirtualTimeScheduler 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(expected, actual) {
  return 'Expected: [' + expected.toString() + ']\r\nActual: [' + actual.toString() + ']';
}

// Using QUnit testing for assertions
var collectionAssert = {
  assertEqual: function (actual, expected) {
    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.startScheduler(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,
  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.startScheduler(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

File:

Dist:

Prerequisites:

NPM Packages:

NuGet Packages:


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
  subscribe = Rx.ReactiveTest.subscribe;

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.startScheduler(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

File:

Dist:

Prerequisites:

NPM Packages:

NuGet Packages:


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.startScheduler(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

File:

Dist:

Prerequisites:

NPM Packages:

NuGet Packages:


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(null, 100, function () {
  return 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

File:

Dist:

Prerequisites:

NPM Packages:

NuGet Packages:


Rx.TestScheduler.prototype.createRejectedPromise(ticks, value)

#

Creates a rejected promise with the given reason and ticks.

Arguments

  1. ticks (Number): The absolute time of the resolution.
  2. reason (Any): The reason for rejection to yield at the given tick.

Returns

(Promise): A mock Promise which rejects with the given reason.

Example

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

var scheduler = new Rx.TestScheduler();

// Create rejected promise
var error = new Error();
var xs = scheduler.createRejectedPromise(201, error);

// Note we'll start at 200 for subscribe, hence missing the 150 mark
var res = scheduler.startScheduler(function () {
  // Need to pass test scheduler due to issue #976
  return Rx.Observable.fromPromise(xs, scheduler);
});

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
  onError(201, error)
]);

Location

File:

Dist:

Prerequisites:

NPM Packages:

NuGet Packages:


Rx.TestScheduler.prototype.createResolvedPromise(ticks, value)

#

Creates a resolved promise with the given value and ticks.

Arguments

  1. ticks (Number): The absolute time of the resolution.
  2. value (Any): The value to yield at the given tick.

Returns

(Promise): A mock Promise which fulfills with the given value.

Example

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

var scheduler = new Rx.TestScheduler();

// Create resolved promise
var xs = scheduler.createResolvedPromise(201, 1);

// Note we'll start at 200 for subscribe, hence missing the 150 mark
var res = scheduler.startScheduler(function () {
  // Need to pass test scheduler due to issue #976
  return Rx.Observable.fromPromise(xs, scheduler);
});

// Implement collection assertion
collectionAssert.assertEqual(res.messages, [
  onNext(201, 1),
  onCompleted(201)
]);

Location

File:

Dist:

Prerequisites:

NPM Packages:

NuGet Packages:


Rx.TestScheduler.prototype.startScheduler(create, settings)

#

Starts the test scheduler and uses the specified settings for creation, subscription and disposal. If not specified, they will be set to their default timings.

Arguments

  1. create : Function - Factory method to create an observable sequence.
  2. settings: Object - An object with the following properties:
    • created: Number - the time to create the Observable sequence. If not specified, will default to 100.
    • subscribed: Number - the time to subscribe to the Observable sequence. If not specified, will default to 200.
    • disposed: Number - the time to dispose the Observable sequence. If not specified, will default to 1000.

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.startScheduler(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

File:

Dist:

Prerequisites:

NPM Packages:

NuGet Packages: