Async beforeEach 完成 before/after 每个测试单元(它)
Async beforeEach finished before/after each test unit(it)
嘿,我是 angular 6(又名 angular)中的测试新手,我有一个问题是对我目前看到的每项测试进行重新评分。
先看一个简单组件的简单测试(由cli生成)
describe('CompComponent', () => {
let component: CompComponent;
let fixture: ComponentFixture<CompComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ CompComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CompComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
我有一个主要问题:
1.How 我确定每个 Async beforeEach 调用都在每个测试单元(又名它)之前完成吗?有没有这种调用会在每次调用之后发生的情况,因为它毕竟是异步调用?
每个 beforeEach
都将在任何测试开始之前完成。
在您的示例中,compileComponents()
是异步的。因此,在这种情况下我们必须使用 async() 方法。
供您参考,看这个link:https://github.com/angular/angular-cli/issues/4774
为了确保您的 beforeEach
将在任何测试开始之前完成,您可以尝试通过添加以下内容来调试您的测试:
compileComponents().then( result => {
console.log(result);
}
你可以在这一行设置一个断点:console.log(result);
你会看到它会一直执行你 运行 你的测试,所以如果你在这行设置一个断点 console.log' line and another one in your firt
ittest, you will see you will never get to the second break point before doing the
console.log` 断点一,这意味着在进行任何测试之前,我们必须等待 beforeEach 中的任何异步调用。
另一种查看 beforeEach
将始终在任何测试开始之前完成的方法是也以这种方式编写测试:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ CompComponent ]
}).compileComponents().then( result => {
fixture = TestBed.createComponent(CompComponent);
component = fixture.componentInstance;
}
}));
您将看到在您的任何测试中 fixture
已经可用,这样做。所以你不需要添加另一个 beforeEach 来初始化你的 fixture
.
要了解更多信息,您可以参考 Stack Overflow 的另一个答案:
嘿,我是 angular 6(又名 angular)中的测试新手,我有一个问题是对我目前看到的每项测试进行重新评分。
先看一个简单组件的简单测试(由cli生成)
describe('CompComponent', () => {
let component: CompComponent;
let fixture: ComponentFixture<CompComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ CompComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CompComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
我有一个主要问题:
1.How 我确定每个 Async beforeEach 调用都在每个测试单元(又名它)之前完成吗?有没有这种调用会在每次调用之后发生的情况,因为它毕竟是异步调用?
每个 beforeEach
都将在任何测试开始之前完成。
在您的示例中,compileComponents()
是异步的。因此,在这种情况下我们必须使用 async() 方法。
供您参考,看这个link:https://github.com/angular/angular-cli/issues/4774
为了确保您的 beforeEach
将在任何测试开始之前完成,您可以尝试通过添加以下内容来调试您的测试:
compileComponents().then( result => {
console.log(result);
}
你可以在这一行设置一个断点:console.log(result);
你会看到它会一直执行你 运行 你的测试,所以如果你在这行设置一个断点 console.log' line and another one in your firt
ittest, you will see you will never get to the second break point before doing the
console.log` 断点一,这意味着在进行任何测试之前,我们必须等待 beforeEach 中的任何异步调用。
另一种查看 beforeEach
将始终在任何测试开始之前完成的方法是也以这种方式编写测试:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ CompComponent ]
}).compileComponents().then( result => {
fixture = TestBed.createComponent(CompComponent);
component = fixture.componentInstance;
}
}));
您将看到在您的任何测试中 fixture
已经可用,这样做。所以你不需要添加另一个 beforeEach 来初始化你的 fixture
.
要了解更多信息,您可以参考 Stack Overflow 的另一个答案: