Angular2测试: 不能绑定到‘ ngModel’,因为它不是‘ input’的已知属性

我试图测试控制 input的角度2双向绑定。这里有一个错误:

Can't bind to 'ngModel' since it isn't a known property of 'input'.

App.Component. html

<input id="name" type="text" [(ngModel)]="name" />
<div id="divName">{{name}}</div>

应用程序组件

@Component({
selector: 'app-root',
templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
name: string;
}

App.Component. spec.ts

import { TestBed, async } from '@angular/core/testing';
import { AppComponent } from './app.component';
import { AppService } from './app.service';
describe('App: Cli', () => {
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
providers:[AppService]
});
});


it('divName', async(() => {
let fixture = TestBed.createComponent(AppComponent);
let comp = fixture.componentInstance;
comp.name = 'test';
fixture.detectChanges();


let compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('divName').textContent).toContain('test');
}));
});
61381 次浏览

您需要将 FormsModule导入到 TestBed配置中。

import { FormsModule } from '@angular/forms';


TestBed.configureTestingModule({
imports: [ FormsModule ],
declarations: [
AppComponent
],
providers:[AppService]
});

您使用 TestBed所做的是从头为测试环境配置一个 NgModule。这允许您只添加测试所需的内容,而不需要添加可能影响测试的不必要的外部变量。

我也有同样的问题,即使在导入表单模块之后,这个问题也没有得到解决。因此,我不得不对文本字段使用 ngModel 的替代方法。请检查 链接:

总之,我使用[ value ]来绑定文本字段的模型,如下所示。

([value])="searchTextValue"

另外,如果使用 date 字段,则需要在 html 中绑定 ts 中的模型,调用该方法

(dateSelect)="onDateSelect($event)"

在类型脚本中,使用以下代码。

onDateSelect(event) {
let year = event.year;
let month = event.month <= 9 ? '0' + event.month : event.month;;
let day = event.day <= 9 ? '0' + event.day : event.day;;
let finalDate = year + "-" + month + "-" + day;
this.finalDateVlaue = finalDate;
}