运行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
,我都需要两个吗?所有教程仅显示第二个,即非异步。运行基本测试所需的代码也分为这两种方法。有什么理由吗?
感谢您的帮助。
答案 0 :(得分:1)
compileComponents()是一个异步函数,该函数返回一个promise beforeEach标记为 async 。因此,Jasmine知道在进行下一步之前,所有问题都必须解决(->这里是beforeEach的第二步)。 第二个beforeEach仅包含同步代码,因此未标记为 async 。
如果您将所有内容都放在一起,那么可能会在调用 createComponent(MyComponent)之前无法解析 compileComponents()-此可以 >会导致错误,但是如果 compileComponents()足够快,则不会。
答案 1 :(得分:0)
规格文件是测试套件文件。本质上,beforeEach
个中的一个建立了您的测试平台,另一个创建了要测试的组件实例。您确实需要它们,以便编写您的测试以及使测试真正起作用。您正在运行的唯一测试是it
块。因此,从根本上说,取决于您如何定义测试环境。