我想测试实现ControlValueAccessor接口的组件允许在我的自定义组件中使用[(ngModel)]
,但问题是通常的输入是正确的但是ngModel
- undefined
。这是代码示例:
@Component({
template: `
<custom-component
[usualInput]="usualInput"
[(ngModel)]="modelValue"
></custom-component>`
})
class TestHostComponent {
usualInput: number = 1;
modelValue: number = 2;
}
describe('Component test', () => {
let component: TestHostComponent;
let fixture: ComponentFixture<TestHostComponent>;
let de: DebugElement;
let customComponent: DebugElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
CustomComponent,
],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
}));
});
所以,我希望我的customComponent中的regularInput Input()值等于1(它是真的),并且ngModel值将等于2,但是ngModel = undefined并且在调试之后我知道ControlValueAccessor writeValue方法不会在测试环境中调用(但是它适用于浏览器)。那么我该如何解决呢?
在你的ControlValueAccessor
组件内你无法访问ngModel
,除非你注入它并做了一些技巧以避免循环依赖。
ControlValueAccessor
有writeValue
方法,它在更新时从控件接收值 - 如果需要,可以将此值存储在组件中然后测试它。