gpt4 book ai didi

angular - 如何测试 Angular 2 双向绑定(bind)输入值

转载 作者:太空狗 更新时间:2023-10-29 18:17:00 24 4
gpt4 key购买 nike

我正在尝试为我的组件编写一个测试来测试 Angular 双向绑定(bind)是否正常工作。

一方面,我有一个看起来像这样的测试(并且它通过了):

it('should bind displayed value to the SearchComponent property', () => {
searchComponent.searchBoxValue = 'abc';
searchCompFixture.detectChanges();
expect(inputEl.nativeElement.getAttribute('ng-reflect-model')).toBe('abc');
});

在哪里

searchCompFixture = TestBed.createComponent(SearchComponent);
inputEl = searchCompFixture.debugElement.query(By.css('#search-box-input'));

<input
id="search-box-input"
[(ngModel)]="searchBoxValue"\>

另一方面,我想编写一个测试,首先设置输入元素的值并检查 SearchComponent 属性值是否已更改。我的尝试:

it('should bind SearchComponent property to the displayed value', fakeAsync(() => {
inputEl.nativeElement.value = 'abc';
let evt = new Event('input');
inputEl.nativeElement.dispatchEvent(evt);

tick();

searchCompFixture.detectChanges();
expect(searchComponent.searchBoxValue).toBe('abc');
}));

但这不起作用,因为 searchComponent.searchBoxValue 值未设置。有什么解决办法吗?

最佳答案

事实证明,在更新输入字段的值之前您需要detechtChanges(我不知道为什么)。这是工作测试:

it('should bind SearchComponent property to the displayed value', fakeAsync(() => {
searchCompFixture.detectChanges();

inputEl.nativeElement.value = 'abc';
let event = new Event('input');
inputEl.nativeElement.dispatchEvent(event);

tick();
expect(searchCompFixture.componentInstance.searchBoxValue).toEqual('abc');
}));

编辑:我发现测试 should bind displayed value to the SearchComponent property 的另一个改进。我不喜欢的是我使用了奇怪的 Angular 属性 ng-reflect-model 而不是正常方式 inputEl.nativeElement.value。问题是 value 还没有被 angular 设置。

将测试更改为以下内容即可解决问题,不再需要任何魔法 - 太棒了!

it('should bind displayed value to the SearchComponent property', fakeAsync(() => {
searchComponent.searchBoxValue = 'abc';

searchCompFixture.detectChanges();
tick();
searchCompFixture.detectChanges();


expect(inputEl.nativeElement.value).toBe('abc');
}));

关于angular - 如何测试 Angular 2 双向绑定(bind)输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705459/

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