为什么ng cli生成的组件的spec文件具有2 beforeeach方法?

时间:2018-09-04 16:57:35

标签: angular karma-jasmine

运行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,我都需要两个吗?所有教程仅显示第二个,即非异步。运行基本测试所需的代码也分为这两种方法。有什么理由吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

如果您将所有内容都放在一起,那么可能会在调用 createComponent(MyComponent)之前无法解析 compileComponents()-此可以 >会导致错误,但是如果 compileComponents()足够快,则不会。

答案 1 :(得分:0)

规格文件是测试套件文件。本质上,beforeEach个中的一个建立了您的测试平台,另一个创建了要测试的组件实例。您确实需要它们,以便编写您的测试以及使测试真正起作用。您正在运行的唯一测试是it块。因此,从根本上说,取决于您如何定义测试环境。