UNPKG

@hirez_io/auto-spies-core

Version:

Create automatic spies from classes in tests, also for promises and observables, used as a common code for jasmine-auto-spies and jest-auto-spies

101 lines 4.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createObservablePropSpy = exports.addObservableHelpersToCalledWithObject = exports.addObservableHelpersToFunctionSpy = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var merge_subject_with_default_values_1 = require("./merge-subject-with-default-values"); function addObservableHelpersToFunctionSpy( // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types spyFunction, valueContainer) { var subject = createReplaySubject(); addObservableHelpers(spyFunction, subject, function (configuredSubject) { valueContainer.value = configuredSubject; }); addNextWithPerCall(spyFunction, valueContainer); } exports.addObservableHelpersToFunctionSpy = addObservableHelpersToFunctionSpy; function addObservableHelpersToCalledWithObject(calledWithObject, calledWithArgs) { // var subject = createReplaySubject(); var returnValueContainer = { value: undefined }; addObservableHelpers(calledWithObject, subject, function (configuredSubject) { returnValueContainer.value = configuredSubject; calledWithObject.argsToValuesMap.set(calledWithArgs, returnValueContainer); }); addNextWithPerCall(calledWithObject, returnValueContainer, function (configuredReturnValueContainer) { calledWithObject.argsToValuesMap.set(calledWithArgs, configuredReturnValueContainer); }); return calledWithObject; } exports.addObservableHelpersToCalledWithObject = addObservableHelpersToCalledWithObject; function createObservablePropSpy() { var subject = createReplaySubject(); var observableSpy = (0, rxjs_1.defer)(function () { return subject; }); addObservableHelpers(observableSpy, subject, function (configuredSubject) { subject = configuredSubject; }); return observableSpy; } exports.createObservablePropSpy = createObservablePropSpy; function addObservableHelpers(objectToDecorate, providedSubject, onSubjectConfiguredCallback) { objectToDecorate.nextWith = function nextWith(value) { providedSubject.next(value); onSubjectConfiguredCallback(providedSubject); }; objectToDecorate.nextOneTimeWith = function nextOneTimeWith(value) { providedSubject.next(value); providedSubject.complete(); onSubjectConfiguredCallback(providedSubject); }; objectToDecorate.nextWithValues = function nextWithValues(valuesConfigs) { /* istanbul ignore else */ if (valuesConfigs && valuesConfigs.length > 0) { var results$ = (0, merge_subject_with_default_values_1.mergeSubjectWithDefaultValues)(providedSubject, valuesConfigs); onSubjectConfiguredCallback(results$); } }; objectToDecorate.throwWith = function throwWith(value) { providedSubject.error(value); onSubjectConfiguredCallback(providedSubject); }; objectToDecorate.complete = function complete() { providedSubject.complete(); onSubjectConfiguredCallback(providedSubject); }; objectToDecorate.returnSubject = function returnSubject() { onSubjectConfiguredCallback(providedSubject); return providedSubject; }; } function createReplaySubject() { return new rxjs_1.ReplaySubject(1); } function addNextWithPerCall(objectToDecorate, returnValueContainer, onValuesPerCallConfigured) { if (onValuesPerCallConfigured === void 0) { onValuesPerCallConfigured = function noop() { }; } objectToDecorate.nextWithPerCall = function nextWithPerCall(valueConfigsPerCall) { var returnedSubjects = []; /* istanbul ignore else */ if (valueConfigsPerCall && valueConfigsPerCall.length > 0) { returnValueContainer.valuesPerCalls = []; valueConfigsPerCall.forEach(function (valueConfiguration) { var replaySubject = new rxjs_1.ReplaySubject(1); replaySubject.next(valueConfiguration.value); returnedSubjects.push(replaySubject); var returnedObservable = replaySubject.asObservable(); if (valueConfiguration.delay) { returnedObservable = returnedObservable.pipe((0, operators_1.delay)(valueConfiguration.delay)); } if (!valueConfiguration.doNotComplete) { returnedObservable = returnedObservable.pipe((0, operators_1.take)(1)); } /* istanbul ignore else */ if (returnValueContainer.valuesPerCalls) { returnValueContainer.valuesPerCalls.push({ wrappedValue: returnedObservable }); } }); onValuesPerCallConfigured(returnValueContainer); } return returnedSubjects; }; } //# sourceMappingURL=observable-spy-utils.js.map