@asuka/di
Version:
Dependencies inject library
109 lines • 4.03 kB
JavaScript
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