@difizen/mana-syringe
Version:
76 lines (71 loc) • 2.3 kB
text/typescript
import assert from 'assert';
import { injectable } from 'inversify';
import { Syringe, Utils } from './core';
describe('register helper', () => {
describe('option parser', () => {
it('#simple class', () => {
()
class Foo {}
const parsed = Utils.toRegistryOption({
token: Foo,
useClass: Foo,
});
assert(parsed.token.length === 1);
assert(parsed.token.includes(Foo));
assert(parsed.useClass.length === 1);
assert(parsed.useClass.includes(Foo));
assert(parsed.lifecycle === Syringe.DefaultOption.lifecycle);
});
it('#simple token', () => {
()
class Foo {}
const parsed = Utils.toRegistryOption({
token: Foo,
lifecycle: Syringe.Lifecycle.singleton,
});
assert(parsed.token.length === 1);
assert(parsed.token.includes(Foo));
assert(parsed.lifecycle === Syringe.Lifecycle.singleton);
});
it('#multiple', () => {
()
class Foo {}
()
class Bar {}
const parsed = Utils.toRegistryOption({
token: Foo,
useClass: [Foo, Bar],
});
assert(parsed.token.length === 1);
assert(parsed.token.includes(Foo));
assert(parsed.useClass.length === 2);
assert(parsed.useClass.includes(Foo));
assert(parsed.useClass.includes(Bar));
});
it('#undefined value', () => {
const TokenSymbol = Symbol('UndefinedToken');
const parsed = Utils.toRegistryOption({
token: TokenSymbol,
useValue: undefined,
});
assert(parsed.token.length === 1);
assert(parsed.token.includes(TokenSymbol));
assert(parsed.useValue === undefined);
assert('useValue' in parsed);
assert(parsed.lifecycle === Syringe.DefaultOption.lifecycle);
});
});
describe('error option', () => {
it('#Named token can not be service to other tokens', () => {
const named = 'named';
()
class Foo {}
const parsed = Utils.toRegistryOption({
token: { token: Foo, named },
});
assert(parsed.token.length === 1);
assert(parsed.token.find((item) => Utils.isNamedToken(item)));
assert(parsed.lifecycle === Syringe.DefaultOption.lifecycle);
});
});
});