当前位置: 首页 > 知识库问答 >
问题:

Angular Lazy加载模块,单元测试代码覆盖

司寇星海
2023-03-14

如何编写懒惰加载模块的单元测试用例

import { routes } from './app-routing';
@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule { }

路由:导出常量路由:路由 = [ { 路径:",重定向到:'home',路径匹配:'完整' }, { 路径:'home',加载儿童:()=

规格文件:

describe('Routes', () => {
  it(`should load 4 Routes`, async(() => {
      console.log(routes.length.toString());
      var a=routes.length;
      expect(a).toEqual(4);
  }));
});

describe('Routes load child', () => {
  let location: Location;
  let router: Router;
  beforeEach(() => {
    TestBed.configureTestingModule({
        imports:[
          RouterTestingModule.withRoutes(routes),
          RouterTestingModule,
            HttpClientModule,
           HomeModule,
            Qwemodule,
            Abcmodule
          ],
        providers: [{provide: APP_BASE_HREF, useValue: '/'}]
    });
  });

  it(`navigate to route  /path loades module`, fakeAsync(() => {
    router = TestBed.get(Router);
    routes.forEach(route => {
      location = TestBed.get(Location);
      router.navigate([route.path]);
      tick(50);
     let t= route.loadChildren;
     expect(route.loadChildren).not.toBeNull;
     expect(location.path()).toBe('/'+route.path);
    });
   }));
});

它将路由器文件覆盖范围隐藏在spc中,但代码覆盖范围中未包含loadchild,因此如何实现100%的代码覆盖率是20%

共有1个答案

澹台衡
2023-03-14

您应该为此使用NgModuleFactoryLoader和Location类

it('should navigate to lazy module', fakeAsync(() => {
    let router = TestBed.get(Router);
    router.initialNavigation();
    //Used to load ng module factories.
    let loader = TestBed.get(NgModuleFactoryLoader);
    let location = TestBed.get(Location);
    // sets up stubbedModules.
    loader.stubbedModules = {
      './path/module_name.module#Your_lazymodule': Your_lazymodule,
    };
    router.resetConfig([
      { path: 'instructor', loadChildren: './path/module_name.module#Your_lazymodule' },
    ]);
    router.navigateByUrl('/URL');
    tick();
    expect(location.path()).toBe('/URL');
  }));
 类似资料:
  • 新的一年 之前因为上家公司的经营出了问题,年前的大裁员,过了一个漫长的春节。 之后加入了新公司,然后正好赶上一个很紧急的项目,忙成狗,因此好久没更新文章了。 不过,我又回来啦! 前言 自动化测试,我们将使用karma和nightmare,内容会包括: 单元测试 e2e测试(放下一篇文章) 其实,单元测试一般用在写公共包的时候,比如通用的js函数库,通用的UI组件库。基本不太会在做业务项目的时候还使

  • 我正在将ANT构建转换为Maven。我不用声纳。 在Maven中,Jacoco似乎并没有报告单元测试本身的覆盖率,而ANT报告。我也一直在尝试为我的Maven build获得这个,但是我没有找到任何东西。 似乎我应该添加一个

  • 我有一个maven多模块项目。 所有测试都在称为tests/的单个模块中,所有代码都在单独的模块中。 有没有办法让我得到代码覆盖率?

  • 我正在尝试用C语言实现一个测试环境,它似乎比我预期的要困难得多。似乎我有3个选择: 1) 通过接口注入依赖关系。 2)通过模板注入依赖关系 这里可以找到这些选项的一个很好的讨论:C中依赖注入的接口与模板 3) 为每个需要模拟/存根的测试生成不同的可执行文件。 选项1和2需要对源代码进行大量修改,我并不十分喜欢这些修改。我不应该为了测试而牺牲性能/清晰度。另一方面,为每个测试制定不同的项目似乎也不是

  • 我有一个Android应用程序,它由两个模块组成: 注意:我使用的是Gradle版本3.1.2。 我尝试了几种方法,下面这个确实合并了测试…但是报道并不正确: //UI测试覆盖率过滤(我们需要运行应用程序的单元测试,以便能够使用Jacoco进行过滤) //单元测试覆盖过滤 任务createTestReport(类型:JacocoReport,Dependson:['test UnitteStuni

  • 问题内容: 我已经配置了EclEmma,使其无法正常运行我的单元测试。但是,编辑器仍会突出显示未涵盖的测试代码。我不希望单元测试中突出显示,因为它们没有检测到覆盖率。我怎样才能做到这一点? 问题答案: 我做了以下步骤: 转到 “首选项”- >“ Java”->“代码覆盖率”,然后 将 “仅路径条目匹配” 选项设置为 看来效果很好。