UNPKG

@asuka/di

Version:
109 lines 4.03 kB
import { __decorate, __metadata } from "tslib"; import 'reflect-metadata'; import React from 'react'; import { create } from 'react-test-renderer'; import test from 'ava'; import { InjectionProvidersContext, InjectableContext, useInstance } from '../context'; import { Injectable } from '../injectable'; function render(component) { return create(React.createElement(InjectableContext, null, component)); } function inject() { var Service = (function () { function Service() { } Service = __decorate([ Injectable() ], Service); return Service; }()); var Module = (function () { function Module(service) { this.service = service; } Module = __decorate([ Injectable(), __metadata("design:paramtypes", [Service]) ], Module); return Module; }()); return { Module: Module, Service: Service }; } test('should getInstance', function (t) { var _a = inject(), Module = _a.Module, Service = _a.Service; var TestComponent = function () { var instance = useInstance(Module); t.truthy(instance.service instanceof Service); return React.createElement("div", null); }; render(React.createElement(TestComponent, null)); }); test('should override provider', function (t) { var _a = inject(), Module = _a.Module, Service = _a.Service; var mockService = { provide: Service, useValue: 1, }; var TestComponent = function () { var instance = useInstance(Module); t.is(instance.service, mockService.useValue); return React.createElement("div", null); }; render(React.createElement(InjectionProvidersContext, { providers: [mockService] }, React.createElement(TestComponent, null))); }); test('Muti providers context', function (t) { var _a = inject(), Module = _a.Module, Service = _a.Service; var mockService1 = { provide: Service, useValue: 1, }; var mockService2 = { provide: Service, useValue: 2, }; var TestComponent1 = function () { var instance = useInstance(Module); t.is(instance.service, mockService1.useValue); return React.createElement("div", null); }; var TestComponent2 = function () { var instance = useInstance(Module); t.is(instance.service, mockService2.useValue); return React.createElement("div", null); }; render(React.createElement(React.Fragment, null, React.createElement(InjectionProvidersContext, { providers: [mockService1] }, React.createElement(TestComponent1, null)), React.createElement(InjectionProvidersContext, { providers: [mockService2] }, React.createElement(TestComponent2, null)))); }); test('Nested providers', function (t) { var _a = inject(), Module = _a.Module, Service = _a.Service; var mockService1 = { provide: Service, useValue: 1, }; var mockService2 = { provide: Service, useValue: 2, }; var TestComponent1 = function () { var instance = useInstance(Module); t.is(instance.service, mockService1.useValue); return React.createElement("div", null); }; var TestComponent2 = function () { var instance = useInstance(Module); t.is(instance.service, mockService2.useValue); return React.createElement("div", null); }; render(React.createElement(React.Fragment, null, React.createElement(InjectionProvidersContext, { providers: [mockService1] }, React.createElement(TestComponent1, null), React.createElement(InjectionProvidersContext, { providers: [mockService2] }, React.createElement(TestComponent2, null), React.createElement(InjectionProvidersContext, { providers: [mockService1] }, React.createElement(TestComponent1, null)))))); }); //# sourceMappingURL=context.spec.js.map