我正在为Angular 9中的Custom Form Control寻找一些单元测试示例。该部分constructor(@Self() private ngControl: NgControl)
导致错误:Error: NodeInjector: NOT_FOUND [NgControl]
。由于我需要以某种方式设置值访问器。
我正在向构造函数中注入ngControl
,因为稍后需要在组件中使用ngControl
。这就是为什么我没有在provide: NG_VALUE_ACCESSOR
中使用典型实现的原因。
我试图通过以下方式嘲笑它:
beforeEach(async(() => {
TestBed.configureTestingModule({
providers: [
{ provide: NgControl, useValue: new FormControlDirective([], [], [], null) }
],
imports: [FormsModule, ReactiveFormsModule]
}).compileComponents();
但是我有一个错误:No valid value accessor for form control with unspecified name attribute
,因为我不知道函数FormControlDirective
的第三个参数应该是什么:valueAccessors: ControlValueAccessor[]
有人知道我该如何嘲笑吗?
尝试像这样嘲笑它:
let mockNgControl: any;
beforeEach(async(() => {
mockNgControl = jasmine.createSpyObj('ngControl', ['value', /* mock other methods required here */]);
TestBed.configureTestingModule({
providers: [
{ provide: NgControl, useValue: mockNgControl }
],
imports: [FormsModule, ReactiveFormsModule]
}).compileComponents();
问题是因为我没有使用Imports数组中的CustomFormControl导入模块。这就是为什么它不起作用。也许会帮助某人。