首页 > 解决方案 > 为什么 ng cli 生成的组件在每个方法之前都有 2 个规范文件?

问题描述

当我运行时ng c my-component,我得到一个包含 2 个 beforeEach 方法的规范文件。

describe('MyComponent', () => {
  let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ MyComponent ]
   })
   .compileComponents();
 }));

  beforeEach(() => {
   fixture = TestBed.createComponent(MyComponent);
   component = fixture.componentInstance;
   fixture.detectChanges();
 });

 it('should create', () => {
   expect(component).toBeTruthy();
 });
});

为什么我有 2 beforeEach,我需要它们吗?所有教程都只显示第二个,即非异步的。运行基本测试所需的代码也分为这两种方法。任何原因?

感谢您的帮助。

标签: angularkarma-jasmine

解决方案


由于compileComponents()是一个返回承诺的异步函数,因此 beforeEach 被标记为async。所以 Jasmine 知道在进行下一步之前必须解决所有问题(-> 这里是第二个 beforeEach)。第二个 beforeEach 仅包含同步代码,因此它没有标记为async

如果将所有内容放在一个 beforeEach 中,则可能会在调用createComponent(MyComponent)之前无法解析compileComponents() - 这可能会导致错误,但如果compileComponents()足够快,则不会。


推荐阅读