[英]Angular: Unit testing lazy-loaded modules with routing
I'm facing some issues testing lazy-loaded modules in Angular. 我在Angular中测试延迟加载的模块时遇到一些问题。 This is my .spec
file: 这是我的.spec
文件:
import { Location } from '@angular/common';
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { Router } from '@angular/router';
import { routes } from './app-routing.module';
import { AppComponent } from './app.component';
import { AppConfigService } from './services/appConfig.service';
import { TranslateModule } from '@ngx-translate/core';
import { NgModuleFactoryLoader } from '@angular/core';
import { VehicleModule} from './views/vehicle/vehicle.module';
import { DriverModule} from './views/driver/driver.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
describe('Router: App', () => {
let location: Location;
let router: Router;
let fixture: ComponentFixture<AppComponent>;
let loader: any;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
BrowserAnimationsModule,
TranslateModule.forRoot(),
RouterTestingModule.withRoutes(routes),
],
declarations: [AppComponent],
providers: [AppConfigService]
});
router = TestBed.get(Router);
location = TestBed.get(Location);
loader = TestBed.get(NgModuleFactoryLoader);
loader.stubbedModules = {
'VehicleModule': VehicleModule,
'DriverModule': DriverModule
};
fixture = TestBed.createComponent(AppComponent);
router.resetConfig([
{
path: 'vehicle',
loadChildren: 'VehicleModule'
},
{
path: 'driver',
loadChildren: 'DriverModule'
},
{
path: '',
loadChildren: 'VehicleModule'
}
]);
fixture = TestBed.createComponent(AppComponent);
router.initialNavigation();
});
it('should create APP', () => {
expect(fixture.componentInstance).toBeDefined();
});
it('lazily navigates to "/driver"',(() => {
router.navigate(['/driver']);
expect(location.path()).toBe('/driver');
}));
});
This is what i got from running the test: 这是我从运行测试中得到的:
Expected '' to be '/driver'.
The routes work fine on the app, the problem is showing up only during the unit testing session. 路由在应用程序上工作正常,问题仅在单元测试期间显示。
What am i missing? 我想念什么?
I'm using karma 1.7.1, Angular 6, jasmine 2.99.1 我正在使用业力1.7.1,Angular 6,茉莉2.99.1
Thanks. 谢谢。
Maybe it is a bit outdated, but here is the code of my lazy loaded module test. 也许有些过时了,但这是我的延迟加载模块测试的代码。
The path to the module is: 该模块的路径为:
{path: 'student', loadChildren: './student/student.module#StudentModule', canLoad: [AuthGuard]} {路径:“ student”,loadChildren:“ ./ student / student.module#StudentModule”,canLoad:[AuthGuard]}
it('should navigate to /student lazy loaded ,pdule', fakeAsync(() => {
const loader = TestBed.get(NgModuleFactoryLoader);
loader.stubbedModules = {lazyModule: StudentModule};
router.resetConfig([
{path: 'student', loadChildren: 'lazyModule'},
]);
router.navigate(['student'])
tick();
expect(location.path()).toBe('/student');
}));
When I will remove: 当我删除时:
router.resetConfig([
{path: 'student', loadChildren: 'lazyModule'},
]);
an exception will be thrown: Expected '' to be '/student'. 将会抛出异常: 期望''为'/ student'。
I am also attaching TestBed configuration: 我还附加了TestBed配置:
let location: Location;
let router: Router;
let fixture;
beforeEach(()=> {
TestBed.configureTestingModule({
imports: [
BrowserAnimationsModule,
RouterTestingModule.withRoutes(routes),
SharedModule,
AuthModule,
MaterialModule,
StoreModule.forRoot(reducers),
EffectsModule.forRoot([AuthEffects, UserEffects])
],
declarations: [
AppComponent,
WelcomeComponent,
NavbarComponent,
ProjectInfoComponent
],
providers: [
Location
]
}).compileComponents();
router = TestBed.get(Router);
location = TestBed.get(Location);
fixture = TestBed.createComponent(AppComponent);
router.initialNavigation();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.