@rxjs-stuff/marbles
Version:
A set of plugins that provide a natural feeling integration with Mocha and Chai for RxJS "marbles" testing.
82 lines • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.frameConsole = exports.marblesTesting = exports.MarblesHelpers = void 0;
const contextual_test_scheduler_1 = require("./contextual-test-scheduler");
const MarblesHelpersInternal = {};
class MarblesHelpersImpl {
get cold() {
return (marbles, marbleValues) => MarblesHelpersInternal.cold(marbles, marbleValues);
}
get expectObservable() {
return (stream, subscriptionMarbles, context) => MarblesHelpersInternal.expectObservable(stream, subscriptionMarbles, context);
}
get expectSubscriptions() {
return (actualSubscriptionLogs, context) => MarblesHelpersInternal.expectSubscriptions(actualSubscriptionLogs, context);
}
get hot() {
return (marbles, marbleValues) => MarblesHelpersInternal.hot(marbles, marbleValues);
}
get scheduler() {
return MarblesHelpersInternal.scheduler;
}
get helpers() {
return this;
}
init(assertDeepEqual) {
this.assertDeepEqual = assertDeepEqual;
}
createTestScheduler() {
return new contextual_test_scheduler_1.ContextualTestScheduler(this.assertDeepEqual);
}
run(fn) {
return MarblesHelpersInternal.scheduler.run(function () {
return fn.call(this, exports.MarblesHelpers);
});
}
}
exports.MarblesHelpers = new MarblesHelpersImpl();
function marblesTesting() {
frameConsole(MarblesHelpersInternal);
beforeEach(() => {
const scheduler = exports.MarblesHelpers.createTestScheduler();
const cold = scheduler.createColdObservable.bind(scheduler);
const hot = scheduler.createHotObservable.bind(scheduler);
const expectObservable = scheduler.expectObservable.bind(scheduler);
const expectSubscriptions = scheduler.expectSubscriptions.bind(scheduler);
Object.assign(MarblesHelpersInternal, {
cold,
expectObservable,
expectSubscriptions,
hot,
scheduler,
helpers: MarblesHelpersInternal,
});
});
afterEach(() => {
delete MarblesHelpersInternal.cold;
delete MarblesHelpersInternal.expectObservable;
delete MarblesHelpersInternal.expectSubscriptions;
delete MarblesHelpersInternal.hot;
delete MarblesHelpersInternal.scheduler;
delete MarblesHelpersInternal.helpers;
});
}
exports.marblesTesting = marblesTesting;
function frameConsole(helpers) {
const ogConsole = (() => {
const { debug, log, warn, info, error, trace } = console;
return { debug, log, warn, info, error, trace };
})();
function initConsole() {
Object.entries(ogConsole).forEach(([name, fn]) => {
console[name] = (...args) => fn.call(console, `#${helpers.scheduler.frame}`, ...args);
});
}
function resetConsole() {
Object.entries(ogConsole).forEach(([name, fn]) => console[name] = fn);
}
beforeEach(initConsole);
afterEach(resetConsole);
}
exports.frameConsole = frameConsole;
//# sourceMappingURL=marbles.js.map