如何在自定义窗体控件中模拟ngControl-角度的单元测试

问题描述 投票:-1回答:2

我正在为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[]

有人知道我该如何嘲笑吗?

angular typescript mocha angular-test
2个回答
0
投票

尝试像这样嘲笑它:

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();

0
投票

问题是因为我没有使用Imports数组中的CustomFormControl导入模块。这就是为什么它不起作用。也许会帮助某人。

© www.soinside.com 2019 - 2024. All rights reserved.