Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度测试台测试路径找不到模块_Angular_Testbed - Fatal编程技术网

Angular 角度测试台测试路径找不到模块

Angular 角度测试台测试路径找不到模块,angular,testbed,Angular,Testbed,我正在尝试使用TestBed测试一个简单的重定向,但仍然看到以下错误: 错误:未捕获(承诺中):错误:找不到模块。/pages/login/login.module#LoginPageModule 我的测试如下: describe('AppComponent', () => { let statusBarSpy, splashScreenSpy, platformReadySpy, platformSpy, platformIsSpy, storageSpy; let route

我正在尝试使用TestBed测试一个简单的重定向,但仍然看到以下错误:

错误:未捕获(承诺中):错误:找不到模块。/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
,尽管我将其包含在
导入
数组中。