UNPKG

shallow-render

Version:

Shallow rendering test utility for Angular

72 lines 3.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mockProvider = mockProvider; const core_1 = require("@angular/core"); const mock_of_provider_1 = require("../models/mock-of-provider"); const type_checkers_1 = require("./type-checkers"); const getProvide = (provider) => { if (Array.isArray(provider)) { return undefined; } else if ((0, type_checkers_1.isTypeProvider)(provider) || provider instanceof core_1.InjectionToken) { return provider; } else { return provider.provide; } }; const recursiveFindProvider = (haystack, needle) => { for (const i of haystack) { if (Array.isArray(i)) { const found = recursiveFindProvider(i, needle); // Recursion if (found) return found; } else if (i === needle || (getProvide(i) && getProvide(i) === getProvide(needle))) { return i; } } return undefined; }; function mockProvider(providerToMock, setup) { if ((0, type_checkers_1.isEnvironmentProviders)(providerToMock)) { return (0, core_1.makeEnvironmentProviders)(providerToMock.ɵproviders.map(p => mockProvider(p, setup))); } const provider = recursiveFindProvider(setup.providers, providerToMock) || providerToMock; if (Array.isArray(provider)) { return provider.map(p => mockProvider(p, setup)); // Recursion } if ((0, type_checkers_1.isExistingProvider)(provider)) { return provider; } const provide = (0, type_checkers_1.isTypeProvider)(provider) ? provider : provider.provide; const isPipe = (0, type_checkers_1.isPipeTransform)(provide); const hasMocks = setup.mocks.has(provide) || setup.mockPipes.has(provide); const userMocks = isPipe ? Object.assign({ transform: setup.mockPipes.get(provide) || (() => '') }, setup.mocks.get(provide)) : setup.mocks.get(provide); // APP_INITIALIZERS break TestBed! // Do this until https://github.com/angular/angular/issues/24218 is fixed if (provide === core_1.APP_INITIALIZER) { return []; } // TODO: What if setup.dontMock.includes(provide.useClass)? if (!hasMocks && recursiveFindProvider(setup.dontMock, provider)) { return provider; } const prov = { provide, multi: 'multi' in provider && provider.multi, }; if (provide instanceof core_1.InjectionToken && (0, type_checkers_1.isValueProvider)(provider)) { return Object.assign(Object.assign({}, prov), { useValue: hasMocks ? userMocks : `MOCKED_INJECTION_TOKEN_VALUE - ${provide.toString()}` }); } const MockProvider = (0, mock_of_provider_1.mockProviderClass)((0, type_checkers_1.isClassProvider)(provider) ? provider.useClass : provide, userMocks); if ((0, type_checkers_1.isClassProvider)(provider)) { return Object.assign(Object.assign({}, prov), { useClass: MockProvider }); } if ((0, type_checkers_1.isFactoryProvider)(provider)) { return Object.assign(Object.assign({}, prov), { useFactory: () => new MockProvider() }); } return Object.assign(Object.assign({}, prov), { useValue: new MockProvider() }); } //# sourceMappingURL=mock-provider.js.map