如何模拟路由器对象并在测试床配置中注入提供程序数组



我正在尝试创建模拟路由器对象并将其注入TestBed配置,但它不起作用。以下是配置:

let mockQuote: QuoteService = new QuoteService(null, null);
let mockOshcStore: OshcStore = new OshcStore(null);
let mockActivatedRoute: ActivatedRoute = new ActivatedRoute();
let mockRouter: Router = new Router(null, null, null, null, null, null, null, null);
//let mockRouter: RouterMock = new RouterMock();
//let router:Router;
TestBed.configureTestingModule({
providers: [
{
provide: QuoteService, useFactory: () => {
return mockQuote;
}
}, FormBuilder, AppStore,
{
provide: OshcStore, useFactory: () => {
return mockOshcStore;
}
},
{
provide: ActivatedRoute, useFactory: () => {
return mockActivatedRoute;
}
},
{
provide: Router, useFactory: () => {
return mockRouter;
}
},
HttpClient, QuoteCISLAdapter
],
declarations: [CreateQuoteComponent]
});
fixture = TestBed.createComponent(CreateQuoteComponent);
component = fixture.componentInstance;

上述方法一直工作到"激活路线",但在到达路线时停止并给出:

TypeError: Cannot read property 'get' of null
at new Router (../packages/router/src/router.ts:406:30)

我也尝试了使用"路由器测试模块"模块导入数组,但也没有工作。有什么想法可以渴望一个安全的模拟路由器对象吗?

我通常在我之前每个的顶部都有类似上面的东西:

mockActivatedRoute = {
url: 'test',
params: of({ paramOne: 1,paramTwo: 2018 })
};

然后是我的提供程序数组中的以下内容:

{ provide: ActivatedRoute, useValue: mockActivatedRoute },

对于路线...这假设您只在组件中使用 naving,如果您使用更多内容,则需要模拟更多内容:

router = {
navigate: jasmine.createSpy('navigate')
};

然后在提供程序数组中:

{ provide: Router, useValue: router },

最新更新