UNPKG

redioactive

Version:

Reactive streams for chaining overlapping promises.

94 lines (93 loc) 4.11 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const redio_1 = __importStar(require("../redio")); describe('Testing the flow or errors', () => { function genny(reject) { let counter = 0; return async () => { if (counter++ < 4) { // console.log('Bang', counter) // return Promise.reject('Should go bang') if (reject) { return Promise.reject(`Bang reject ${counter}!`); } throw new Error(`Bang throw ${counter}!`); } else { return redio_1.end; } }; } test('Throw and extract errors', async () => { const errors = jest.fn(); await expect((0, redio_1.default)(genny(false)) .errors((e) => { errors(e); }) .toArray()).resolves.toEqual([]); expect(errors).toHaveBeenCalledTimes(4); expect(errors).toHaveBeenNthCalledWith(1, expect.objectContaining({ message: expect.stringContaining('Bang throw') })); }); test('Reject and extract errors', async () => { const errors = jest.fn(); await expect((0, redio_1.default)(genny(true)) .errors((e) => { errors(e); }) .toArray()).resolves.toEqual([]); expect(errors).toHaveBeenCalledTimes(4); expect(errors).toHaveBeenNthCalledWith(1, expect.objectContaining({ message: expect.stringContaining('Bang reject') })); }); test('No errors does not call errors', async () => { const errors = jest.fn(); await expect((0, redio_1.default)([1, 2, 3]).errors(errors).toArray()).resolves.toEqual([1, 2, 3]); expect(errors).not.toHaveBeenCalled(); }); test('Convert errors into values', async () => { const errors = (e) => e.message; await expect((0, redio_1.default)(genny(false)).errors(errors).toArray()).resolves.toEqual([ 'Bang throw 1!', 'Bang throw 2!', 'Bang throw 3!', 'Bang throw 4!' ]); }); test('Transform error with throw', async () => { const errors = (e) => new Error(`MORE ${e.message}`); await expect((0, redio_1.default)(genny(false)).errors(errors).toArray()).rejects.toThrow(/MORE Bang throw/); }); test('Transform error with reject', async () => { const errors = (e) => new Error(`MORE ${e.message}`); await expect((0, redio_1.default)(genny(true)).errors(errors).toArray()).rejects.toThrow(/MORE Bang reject/); }); test.skip('Catch errors downstream', async () => { const eachFn = jest.fn(); const catchFn = jest.fn(); await expect((0, redio_1.default)(genny(false)).errors(console.log).each(console.log).catch(catchFn).toPromise()).rejects.toBeTruthy(); expect(eachFn).not.toHaveBeenCalled(); expect(catchFn).toHaveBeenCalledTimes(4); }); });