UNPKG

@sigi/react

Version:

React bindings for sigi framework

95 lines 3.76 kB
import { __decorate, __metadata } from "tslib"; import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; import '@abraham/reflection'; import { Injectable } from '@sigi/di'; import { render as testRender } from '@testing-library/react'; import { InjectionProvidersContext, useInstance } from '../injectable-context'; function render(component) { return testRender(_jsx(InjectionProvidersContext, { children: component })); } function inject() { let Service = class Service { }; Service = __decorate([ Injectable() ], Service); let Module = class Module { constructor(service) { this.service = service; } }; Module = __decorate([ Injectable(), __metadata("design:paramtypes", [Service]) ], Module); return { Module, Service }; } describe('Context specs', () => { it('should getInstance', () => { const { Module, Service } = inject(); const TestComponent = () => { const instance = useInstance(Module); expect(instance.service instanceof Service).toBeTruthy(); return _jsx("div", {}); }; render(_jsx(TestComponent, {})); }); it('should override provider', () => { const { Module, Service } = inject(); const mockService = { provide: Service, useValue: 1, }; const TestComponent = () => { const instance = useInstance(Module); expect(instance.service).toBe(mockService.useValue); return _jsx("div", {}); }; render(_jsx(InjectionProvidersContext, { providers: [mockService], children: _jsx(TestComponent, {}) })); }); it('Multi providers context', () => { const { Module, Service } = inject(); const mockService1 = { provide: Service, useValue: 1, }; const mockService2 = { provide: Service, useValue: 2, }; const TestComponent1 = () => { const instance = useInstance(Module); expect(instance.service).toBe(mockService1.useValue); return _jsx("div", {}); }; const TestComponent2 = () => { const instance = useInstance(Module); expect(mockService2.useValue).toBe(instance.service); return _jsx("div", {}); }; render(_jsxs(_Fragment, { children: [_jsx(InjectionProvidersContext, { providers: [mockService1], children: _jsx(TestComponent1, {}) }), _jsx(InjectionProvidersContext, { providers: [mockService2], children: _jsx(TestComponent2, {}) })] })); }); it('Nested providers', () => { const { Module, Service } = inject(); const mockService1 = { provide: Service, useValue: 1, }; const mockService2 = { provide: Service, useValue: 2, }; const TestComponent1 = () => { const instance = useInstance(Module); expect(instance.service).toBe(mockService1.useValue); return _jsx("div", {}); }; const TestComponent2 = () => { const instance = useInstance(Module); expect(instance.service).toBe(mockService2.useValue); return _jsx("div", {}); }; render(_jsx(_Fragment, { children: _jsxs(InjectionProvidersContext, { providers: [mockService1], children: [_jsx(TestComponent1, {}), _jsxs(InjectionProvidersContext, { providers: [mockService2], children: [_jsx(TestComponent2, {}), _jsx(InjectionProvidersContext, { providers: [mockService1], children: _jsx(TestComponent1, {}) })] })] }) })); }); }); //# sourceMappingURL=context.spec.js.map