gpt4 book ai didi

javascript - 如何在 Angular 4/Jasmine 中的 beforeEach 中等待

转载 作者:行者123 更新时间:2023-11-30 14:55:41 25 4
gpt4 key购买 nike

我的一个组件在 ngOnInit 中使用了 setTimeout,例如:

ngOnInit() {
setTimeout(() => {
// do some setup stuff using FormBuilder
}, 100);
}

在该组件的单元测试中,我需要监视使用 FormBuilder 以编程方式构建的控件之一的方法之一,因此我在 beforeEach 中执行此操作:

describe('testing something', () => {

beforeEach(() => {
spyOn(component.form.controls.myControl, 'enable');
});

it('does something', () => {
// test stuff
});

});

在添加超时之前,测试运行完美。如何让 beforeEachngOnInit 方法中等待 100 毫秒超时?

我已经尝试将 asyncfakeAsync 添加到外部描述中,例如像这样:

 describe('testing something', <any>fakeAsync(() => {
...
}));

describe('testing something', async(() => {
...
}));

但在第一种情况下,使用 fakeAsync 我在测试运行器中看到一条消息 Error: Expected to be running in 'ProxyZone', but it was not found。 ,在第二种情况下,它甚至不运行测试。我还尝试将 it 方法包装在 fakeAsync 中,但这不会延迟 beforeEach

我尝试将 spyOn 方法包装在 setTimeout 中的 beforeEach 中,但这似乎没有任何效果,即测试以同样的方式失败。

我还尝试将 fakeAsyncbeforeEach 一起使用,如下所示:

beforeEach(<any>fakeAsync(() => {
tick(100);
spyOn(component.modelForm.controls.myControl, 'enable');

}));

但这也行不通。它不会导致任何错误,但我想要监视的方法尚不存在,即使在勾号之后也是如此。

如何强制 beforeEachngOnInit() 中等待超时?有可能吗?

最佳答案

如果需要,可以为 beforeEach 修改以下解决方案

before(() => {
jasmine.clock().install();
})

after(() => {
jasmine.clock().uninstall();
})

it('test case', () => {
spyOn(component.modelForm.controls.myControl, 'enable');

component.ngOnInit();

var timeout = 2000 // 2 seconds
jasmine.clock().tick(timeout);

expect(component.modelForm.controls.myControl.enable).toHaveBeenCalled()
})

关于javascript - 如何在 Angular 4/Jasmine 中的 beforeEach 中等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306136/

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