Dependency injection lib for Egg.js.
// serviceimport{Context}from'egg-di';
@ContextexportclassHackerNewsextendsService{foo(){}}// other serviceimport{inject}from'egg-di';exportclassFooextendsService{
@inject()privatereadonlyhackerNews: HackerNews;bar(){this.hackerNews.foo();}}// other controllerimport{inject}from'egg-di';exportclassFooextendsController{
@inject()privatereadonlyhackerNews: HackerNews;bar(){this.hackerNews.foo();}}// FooexportdefaultclassFoo{
@inject(()=>Bar)readonlybar: Bar;}// BarexportdefaultclassBar{
@inject(()=>Foo)readonlyfoo: Foo;}Test injected service.
// serviceimport{Context}from'egg-di';
@ContextexportclassHackerNewsextendsService{foo(){}}// hackernews.test.tsimport{getComponent}from'egg-di';describe('service/HackerNews.test.js',()=>{constapp=mm.app();letctx: Context;lethackerNews: HackerNews;before(async()=>{awaitapp.ready();ctx=app.mockContext();hackerNews=getComponent(HackerNews,ctx);});it('getTopStories',async()=>{constlist=awaithackerNews.getTopStories();assert(list.length===30);});});Mock injected service.
// serviceimport{Context}from'egg-di';
@ContextexportclassHackerNewsextendsService{foo(){}}// bar.test.tsimport{getComponent}from'egg-di';constapp=mm.app();ctx=app.mockContext();consthackerNews: HackerNews=getComponent(HackerNews,ctx);mm.data(hackerNews,'foo','hello');