gpt4 book ai didi

unit-testing - Angular2 组件 : Testing form input value change

转载 作者:太空狗 更新时间:2023-10-29 17:08:43 26 4
gpt4 key购买 nike

我有一个文本输入,我正在监听变化。

我的组件.ts

ngOnInit() {
this.searchInput = new Control();
this.searchInput.valueChanges
.distinctUntilChanged()
.subscribe(newValue => this.search(newValue))
}
search(query) {
// do something to search
}

我的组件.html

<search-box>
<input type="text" [ngFormControl]="searchInput" >
</search-box>

运行应用程序一切正常,但我想对其进行单元测试。

这就是我尝试过的

我的组件.spec.ts

beforeEach(done => {
createComponent().then(fix => {
cmpFixture = fix
mockResponse()
instance = cmpFixture.componentInstance
cmpFixture.detectChanges();
done();
})
})
describe('on searching on the list', () => {
let compiled, input
beforeEach(() => {
cmpFixture.detectChanges();
compiled = cmpFixture.debugElement.nativeElement;
spyOn(instance, 'search').and.callThrough()
input = compiled.querySelector('search-box > input')
input.value = 'fake-search-query'
cmpFixture.detectChanges();
})
it('should call the .search() method', () => {
expect(instance.search).toHaveBeenCalled()
})
})

测试失败,因为未调用 .search() 方法。

我想我必须以另一种方式设置 value 才能让测试实现更改,但我真的不知道如何设置。

有人有想法吗?

最佳答案

可能有点晚了,但似乎您的代码在设置输入元素值后没有调度 input 事件:

// ...    
input.value = 'fake-search-query';
input.dispatchEvent(new Event('input'));
cmpFixture.detectChanges();
// ...

Updating input html field from within an Angular 2 test

关于unit-testing - Angular2 组件 : Testing form input value change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37352337/

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