@microgamma/digator
install
npm i -S @microgamma/digator
or yarn add @microgamma/digator
How to use
Decorate a class with @Injectable()
.
import { Injectable } from '@microgamma/digator';
@Injectable()
class MyClass {
public sayHello(name: string) {
return `Hello ${name}`;
}
}
Inject it using @Inject(<Class>)
import { Inject } from '@microgamma/digator';
class Consumer {
constructor(
@Inject(MyClass) public myClassSingleton: MyClass
) {
this.myClassSingleton.sayHello('consumer');
}
}
Getting a singleton programmatically
const singleton = injector(MyClass);
Create the app
@DI({
providers: [
MyClass,
]
})
class App {
}
const app = bootstrap(App);
Providing custom implementation
providers
array also accept an object such as:
@DI({
providers: [
{
provide: MyClass,
useClass: MyCustomImplementation,
},
]
})
class App {
}
const app = bootstrap(App);
Testing
In order to test a singleton and mock dependencies use TestBed
import { Inject } from '@microgamma/digator';
describe('MyClass', () => {
@Injectable()
class HttpService {
}
@Injectable()
class TestClass {
constructor(
@Inject(HttpService) http: HttpService,
) {
}
}
let instance;
beforeEach(() => {
TestBed.configure({
providers: [
TestClass,
{
provide: HttpService,
useClass: class {
}
}
]
});
instance = TestBed.inject(TestClass);
});
it('should exist', () => {
expect(instance).toBeTruthy();
});
});
Mocked
Only if jest is used the Mocked
utility can be used to automatically mock any given class.
import { Inject } from '@microgamma/digator';
describe('MyClass', () => {
@Injectable()
class HttpService {
}
@Injectable()
class TestClass {
constructor(
@Inject(HttpService) http: HttpService,
) {
}
}
let instance;
beforeEach(() => {
TestBed.configure({
providers: [
TestClass,
{
provide: HttpService,
useClass: Mocked(HttpService)
}
]
});
instance = TestBed.inject(TestClass);
});
it('should exist', () => {
expect(instance).toBeTruthy();
});
});
for more info look at its tests
DEBUG
Prepend DEBUG=microgamma:digator*
to your script to see debugging information.