angular2 测试:无法绑定到 'ngModel',因为它不是 'input' 的已知 属性
angular2 testing: Can't bind to 'ngModel' since it isn't a known property of 'input'
我正在尝试测试控制的 angular2 双向绑定 input
。这是错误:
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>
app.component.ts
@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');
}));
});
您需要将 FormsModule
导入 TestBed
配置。
import { FormsModule } from '@angular/forms';
TestBed.configureTestingModule({
imports: [ FormsModule ],
declarations: [
AppComponent
],
providers:[AppService]
});
您使用 TestBed
所做的是从头开始为测试环境配置 NgModule。这使您可以只添加测试所需的内容,而不会有可能影响测试的不必要的外部变量。
我有同样的问题,即使在导入表单模块后也没有解决。所以我不得不为文本字段使用 ngModel 的替代方法。请检查此 link:
总而言之,我曾使用 [value] 像这样绑定文本字段的模型。
([value])="searchTextValue"
此外,如果您使用日期字段,则需要在 ts 中绑定模型。在html中调用方法
(dateSelect)="onDateSelect($event)"
在类型脚本中,使用以下 code.This 仅当您使用 Ngbdate picker 时才适用。
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;
}
我正在尝试测试控制的 angular2 双向绑定 input
。这是错误:
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>
app.component.ts
@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');
}));
});
您需要将 FormsModule
导入 TestBed
配置。
import { FormsModule } from '@angular/forms';
TestBed.configureTestingModule({
imports: [ FormsModule ],
declarations: [
AppComponent
],
providers:[AppService]
});
您使用 TestBed
所做的是从头开始为测试环境配置 NgModule。这使您可以只添加测试所需的内容,而不会有可能影响测试的不必要的外部变量。
我有同样的问题,即使在导入表单模块后也没有解决。所以我不得不为文本字段使用 ngModel 的替代方法。请检查此 link:
总而言之,我曾使用 [value] 像这样绑定文本字段的模型。
([value])="searchTextValue"
此外,如果您使用日期字段,则需要在 ts 中绑定模型。在html中调用方法
(dateSelect)="onDateSelect($event)"
在类型脚本中,使用以下 code.This 仅当您使用 Ngbdate picker 时才适用。
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;
}