Angular 角度测试台测试路径找不到模块
我正在尝试使用TestBed测试一个简单的重定向,但仍然看到以下错误:Angular 角度测试台测试路径找不到模块,angular,testbed,Angular,Testbed,我正在尝试使用TestBed测试一个简单的重定向,但仍然看到以下错误: 错误:未捕获(承诺中):错误:找不到模块。/pages/login/login.module#LoginPageModule 我的测试如下: describe('AppComponent', () => { let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy, platformIsSpy, storageSpy; let route
错误:未捕获(承诺中):错误:找不到模块。/pages/login/login.module#LoginPageModule
我的测试如下:
describe('AppComponent', () => {
let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy, platformIsSpy, storageSpy;
let router: Router;
let location: Location;
let fixture, loginFixture;
let comp: AppComponent;
beforeEach(async(() => {
statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']);
splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']);
platformReadySpy = Promise.resolve();
platformIsSpy = Promise.resolve('ipad');
platformSpy = jasmine.createSpyObj('Platform', { ready: platformReadySpy, is: platformIsSpy })
storageSpy = jasmine.createSpyObj('Storage', ['get', 'set', 'clear', 'remove', 'ready']);
TestBed.configureTestingModule({
declarations: [AppComponent],
imports: [
IonicStorageModule.forRoot(),
HttpClientTestingModule,
LoginPageModule,
RouterTestingModule.withRoutes(routes),
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [
{ provide: Storage, useClass: StorageMock },
{ provide: StatusBar, useValue: statusBarSpy },
{ provide: SplashScreen, useValue: splashScreenSpy },
{ provide: Platform, useValue: platformSpy },
],
}).compileComponents();
router = TestBed.get(Router);
location = TestBed.get(Location);
fixture = TestBed.createComponent(AppComponent);
loginFixture = TestBed.createComponent
comp = fixture.componentInstance;
router.initialNavigation();
}));
it('navigates to "" redirects you to /login', fakeAsync(() => {
router.navigate(['/login']);
tick();
expect(location.path()).toBe('/login')
}));
});
而我在app routing.module.ts中的路由是:
export const routes: Routes = [
{
path: '',
redirectTo: 'login',
pathMatch: 'full'
},
{
path: 'login',
loadChildren: './pages/login/login.module#LoginPageModule'
// component: LoginPage
},
{
path: 'manager-dashboard',
canActivate: [AuthGuard],
loadChildren: './pages/manager-dashboard/manager-dashboard.module#ManagerDashboardPageModule'
},
];
const routes: Routes = [
{
path: '',
component: LoginPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [LoginPage]
})
export class LoginPageModule {}
我的LoginPageModule
是:
export const routes: Routes = [
{
path: '',
redirectTo: 'login',
pathMatch: 'full'
},
{
path: 'login',
loadChildren: './pages/login/login.module#LoginPageModule'
// component: LoginPage
},
{
path: 'manager-dashboard',
canActivate: [AuthGuard],
loadChildren: './pages/manager-dashboard/manager-dashboard.module#ManagerDashboardPageModule'
},
];
const routes: Routes = [
{
path: '',
component: LoginPage
}
];
@NgModule({
imports: [
CommonModule,
FormsModule,
IonicModule,
RouterModule.forChild(routes)
],
declarations: [LoginPage]
})
export class LoginPageModule {}
我需要做些什么才能使这项工作正常吗?在测试时,您需要删除延迟加载的模块。在beforeach函数中添加以下行:-
const loader = TestBed.get(NgModuleFactoryLoader);
然后在您的测试用例中,在导航代码之前,添加以下内容:-
loader.stubbedModules = {lazyModule: LoginPageModule};
例如:
有关更多详细信息,您可以在此处阅读有关测试延迟加载模块的内容:-
我希望它能有所帮助。它是否正常工作,并且只在测试用例中抛出错误?是的,在应用程序中工作正常。我只是想确保我的基础可以用于更复杂的测试,我添加了
const loader=TestBed.get(NgModuleFactoryLoader)代码>就在每个
块之前的之前,我看到错误:错误:无法从同步测试中调用Promise.then。
并将其作为声明异常引用。@Jeremythonas。对不起,我的错。在beforeach方法中添加此初始化。我刚刚更新了上面的答案。很抱歉在测试台上太新了,但现在它显示了错误:错误:Uncaught(承诺中):TypeError:this.loader.load不是一个函数
。我觉得这仍然是一个申报问题。在调用configureTestingModule
之前,我必须声明loader
。在configureTestingModule
之后,我调用了loader=TestBed.get(NgModuleFactoryLoader)代码>最后在测试中,如您所示,我调用了loader.stubbedModules
。@Jeremy Thomas。我已经更新了我的答案,并在测试用例中包含了初始化部分。看看这是否对您有效。似乎这样解决了它,但现在它抛出了错误:无法找到模块LoginPageModule
,尽管我将其包含在导入
数组中。