如何模拟 Router 对象并注入 TestBed 配置中的 providers 数组
How to mock a Router object and inject into providers array in TestBed configuration
我正在尝试创建模拟路由器对象并将其注入到 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;
以上工作直到 'ActivatedRoute' 但当它到达路线时停止并给出:
TypeError: Cannot read property 'get' of null
at new Router (../packages/router/src/router.ts:406:30)
我也尝试过使用 'RouterTestingModule' 模块导入数组,但也没有用。想创建一个安全的模拟 Router 对象吗?
我通常在 beforeEach 的顶部有类似上面的内容:
mockActivatedRoute = {
url: 'test',
params: of({ paramOne: 1,paramTwo: 2018 })
};
然后是我的提供商数组中的以下内容:
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
对于路由...这假定您仅在组件中使用导航,如果您使用更多,则需要模拟更多内容:
router = {
navigate: jasmine.createSpy('navigate')
};
然后在提供者数组中:
{ provide: Router, useValue: router },
我正在尝试创建模拟路由器对象并将其注入到 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;
以上工作直到 'ActivatedRoute' 但当它到达路线时停止并给出:
TypeError: Cannot read property 'get' of null
at new Router (../packages/router/src/router.ts:406:30)
我也尝试过使用 'RouterTestingModule' 模块导入数组,但也没有用。想创建一个安全的模拟 Router 对象吗?
我通常在 beforeEach 的顶部有类似上面的内容:
mockActivatedRoute = {
url: 'test',
params: of({ paramOne: 1,paramTwo: 2018 })
};
然后是我的提供商数组中的以下内容:
{ provide: ActivatedRoute, useValue: mockActivatedRoute },
对于路由...这假定您仅在组件中使用导航,如果您使用更多,则需要模拟更多内容:
router = {
navigate: jasmine.createSpy('navigate')
};
然后在提供者数组中:
{ provide: Router, useValue: router },