angular - 为什么 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
,我需要它们吗?所有教程都只显示第二个,即非异步的。运行基本测试所需的代码也分为这两种方法。任何原因?
感谢您的帮助。
解决方案
由于compileComponents()是一个返回承诺的异步函数,因此 beforeEach 被标记为async。所以 Jasmine 知道在进行下一步之前必须解决所有问题(-> 这里是第二个 beforeEach)。第二个 beforeEach 仅包含同步代码,因此它没有标记为async。
如果将所有内容放在一个 beforeEach 中,则可能会在调用createComponent(MyComponent)之前无法解析compileComponents() - 这可能会导致错误,但如果compileComponents()足够快,则不会。
推荐阅读
- javascript - 为什么我的 JavaScript 不能加载到我的网页上(使用 window.onload)?
- css - 如何在一侧创建带有人字形镂空背景图像/颜色的巨型机/英雄?
- c - 将元素保存在二维数组中
- javascript - 是否有一种通用的方法可以知道用户是否登录(或具有身份验证)到适用于所有人(或至少大多数网站)的网站?
- python - 从抓取创建文本文件但无法打开文件
- arrays - React Native 渲染随机数组图像
- arrays - 如何正确使用换行符作为分隔符将输入保存到数组中
- javascript - 从片段内的按钮打开一个活动(已解决!)
- wpf - 关闭窗口时如何从用户控件调用方法
- mysql - 如何在 phpmyadmin 中进行搜索和替换