gpt4 book ai didi

angular - Async beforeEach 在每个测试单元之前/之后完成

转载 作者:行者123 更新时间:2023-12-03 22:12:57 24 4
gpt4 key购买 nike

嘿,我是 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.我怎么知道每个 Async beforeEach 调用是在每个测试单元(又名它)之前完成的?是否有任何情况下此调用会在每个它之后发生,因为它毕竟是异步调用?

最佳答案

每个beforeEach将在任何测试开始之前完成。

在您的示例中,compileComponents()是异步的。因此,在这种情况下我们必须使用 async() 方法。

供您引用,请查看此链接: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 中设置断点它 test, 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-2-testing-async-function-call-when-to-use

关于angular - Async beforeEach 在每个测试单元之前/之后完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52864485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com