Angular2单元测试之前每个块太慢

时间:2016-10-20 14:17:23

标签: unit-testing angular

这是我在每个块之前进行单元测试。它工作得很好,为每个测试提供了一个新的组件实例。但是,执行beforeEach块大约需要4秒。当你进行了200次测试时,这很慢!

我想将大部分代码移动到beforeAll块(如果您使用Jasmine done()回调而不是使用异步,则可以使用)但我仍然无法为每个测试创建新实例。有些测试失败,因为之前的测试已经篡改了唯一的实例。

我如何......

  1. 创建一个新的组件实例,而不会为每次测试执行这段耗时的代码。
    1. 将实例重置为未处理状态。
    2. beforeEach(async(() => {
          TestBed.configureTestingModule({
            imports: [AppModule],
            providers: [{provide: APP_BASE_HREF, useValue: '/'},
              MockBackend,
              BaseRequestOptions,
              {
                provide: Http,
                useFactory: (pBackend: MockBackend, pOptions: BaseRequestOptions) => {
                  return new Http(pBackend, pOptions);
                },
                deps: [MockBackend, BaseRequestOptions]
              }]
          }).compileComponents()
            .then(() => {
              fix = TestBed.createComponent(Route1DetailComponent);
              instance = fix.componentInstance;
              injector = fix.debugElement.injector;
            });
      }));
      

2 个答案:

答案 0 :(得分:0)

我决定在评论中采用@peeskillet和@estus建议的方法。谢谢你们两个。

确定要包含哪些组件/模块成为我在此处解决的下一个问题..

How do you know which components to import when unit testing?

答案 1 :(得分:0)

我写了一个小函数来预编译给定模块的所有内容,以便在每个测试中重复使用。默认情况下,Angular每次都会重新编译所有内容,但这会将它们设置为好像它们是在测试套件开始时使用AoT编译的。它是precompileForTests()中的s-ng-dev-utils函数。检查一下-希望对您有帮助!