@sigi/react
Version:
React bindings for sigi framework
95 lines • 3.76 kB
JavaScript
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