我在路由的单元测试中遇到了一些问题。我已经尝试过this解决方案,但是现在这种延迟加载表示法是deprecated,因此由于某种原因我的测试失败了。 有人可以给我建议我的代码怎么了?
app-routing.module.ts :
export const routes: Routes = [
{path: 'about', component: AboutComponent},
{path: 'files', loadChildren: () => import('./files/files.module').then(m => m.FilesModule)},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
app-routing.module.spec.ts :
describe('AppRoutingModule', () => {
let location: Location;
let router: Router;
let fixture;
beforeEach(() => {
TestBed.configureTestingModule({
imports:[
RouterTestingModule.withRoutes(routes),
HttpClientModule,
AboutComponent,
],
declarations: [
AppComponent,
FilesComponent,
],
providers: [{provide: APP_BASE_HREF, useValue: '/'}]
})
router = TestBed.get(Router);
location = TestBed.get(Location);
fixture = TestBed.createComponent(AppComponent);
router.initialNavigation();
});
it('should navigate to files', fakeAsync(() => {
const loader = TestBed.get(NgModuleFactoryLoader);
loader.stubbedModules = {lazyModule : FilesModule }
router.resetConfig([
{path: 'files', loadChildren: 'lazyModule'},
]);
router.navigate(['files']);
tick(50);
fixture.detectChanges();
expect(location.path()).toBe('/files');
}));
});
谢谢!
答案 0 :(得分:1)
您尝试过吗:
router.resetConfig([
{ path: 'files', loadChildren: () => Promise.resolve(FilesModule) },
]);
?
或者在这一点上它可能只是一个间谍
const spy = jasmine.createSpy('loadChildren');
...
router.resetConfig([
{ path: 'files', loadChildren: spy },
]);
...
expect(spy).toHaveBeenCalled();
未经测试,所以不知道它是否可以工作。