问题描述: 在Angular 8的单元测试中,当尝试设置属性'valueAccessor'为null时,出现错误。
解决方法:
要解决这个问题,可以使用@ViewChild
装饰器来获取对应的元素,并进行相应的设置。以下是一个示例代码:
import { Component, ViewChild } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
@Component({
template: `
`
})
class MyComponent {
@ViewChild('myInput', { static: true }) input: any;
value: string;
}
describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ MyComponent ]
});
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should set valueAccessor to null', () => {
const inputElement = fixture.nativeElement.querySelector('input');
component.input.valueAccessor = null;
fixture.detectChanges();
expect(component.input.value).toBeNull();
});
});
在上面的示例中,我们使用@ViewChild
装饰器来获取到元素的引用,并将其保存在
input
属性中。然后,我们可以通过component.input.valueAccessor
来设置valueAccessor
属性为null。
请注意,我们在beforeEach
块中使用fixture.detectChanges()
来触发Angular的变更检测。这样可以确保组件和模板之间的绑定正确更新。
最后,在测试中,我们使用expect
断言来验证value
属性是否为null。
希望以上解决方法能够帮助到您!