ContainerTests.ts
93 lines
| 2.6 KiB
| video/mp2t
|
TypeScriptLexer
|
|
r41 | import { test, TapeWriter } from "./TestTraits"; | ||
|
|
r40 | import { Container } from "@implab/core/di/Container"; | ||
| import { ReferenceDescriptor } from "@implab/core/di/ReferenceDescriptor"; | ||||
| import { AggregateDescriptor } from "@implab/core/di/AggregateDescriptor"; | ||||
|
|
r41 | import { ValueDescriptor } from "@implab/core/di/ValueDescriptor"; | ||
| import { TraceSource, DebugLevel } from "@implab/core/log/TraceSource"; | ||||
| import { Foo } from "./mock/Foo"; | ||||
| import { Bar } from "./mock/Bar"; | ||||
| import { isNull } from "@implab/core/safe"; | ||||
|
|
r40 | |||
|
|
r41 | test("Container register/resolve tests", async t => { | ||
|
|
r40 | const container = new Container(); | ||
| const connection1 = "db://localhost"; | ||||
|
|
r42 | t.throws( | ||
| () => container.register("bla-bla", "bla-bla"), | ||||
| "Do not allow to register anything other than descriptors" | ||||
| ); | ||||
|
|
r40 | |||
|
|
r42 | t.doesNotThrow( | ||
| () => container.register("connection", new ValueDescriptor(connection1)), | ||||
| "register ValueDescriptor" | ||||
| ); | ||||
|
|
r40 | |||
|
|
r44 | t.equals(container.resolve("connection"), connection1, "resolve string value"); | ||
|
|
r42 | |||
| t.doesNotThrow( | ||||
| () => container.register( | ||||
| "dbParams", | ||||
| new AggregateDescriptor({ | ||||
| timeout: 10, | ||||
| connection: new ReferenceDescriptor({ name: "connection" }) | ||||
| }) | ||||
| ), | ||||
| "register AggregateDescriptor" | ||||
|
|
r40 | ); | ||
|
|
r44 | const dbParams = container.resolve("dbParams"); | ||
|
|
r42 | t.equals(dbParams.connection, connection1, "should get string value 'dbParams.connection'"); | ||
|
|
r41 | }); | ||
| test("Container configure/resolve tests", async t => { | ||||
| const container = new Container(); | ||||
| await container.configure({ | ||||
| foo: { | ||||
| $type: Foo | ||||
| }, | ||||
|
|
r40 | |||
|
|
r42 | box: { | ||
| $type: Bar, | ||||
| params: { | ||||
| $dependency: "foo" | ||||
| } | ||||
| }, | ||||
|
|
r41 | bar: { | ||
| $type: Bar, | ||||
| params: { | ||||
| db: { | ||||
| provider: { | ||||
| $dependency: "db" | ||||
| } | ||||
| } | ||||
| } | ||||
| } | ||||
| }); | ||||
|
|
r42 | t.pass("should configure from js object"); | ||
|
|
r41 | |||
| const f1 = container.resolve("foo"); | ||||
|
|
r42 | |||
| t.assert(!isNull(f1), "foo should be not null"); | ||||
| t.throws(() => container.resolve("bar"), "should not resolve dependency 'db'"); | ||||
| }); | ||||
| test("Load configuration from module", async t => { | ||||
| const container = new Container(); | ||||
| await container.configure("test/mock/config1"); | ||||
| t.pass("The configuration should load"); | ||||
| const f1 = container.resolve("foo"); | ||||
|
|
r41 | t.assert(!isNull(f1), "foo should be not null"); | ||
| const b1 = container.resolve("bar"); | ||||
|
|
r42 | t.assert(!isNull(b1), "foo should be not null"); | ||
|
|
r40 | }); | ||
