angular2 testi: "input" un bilinen bir özelliği olmadığı için "ngModel" e bağlanamaz


103

Kontrol için açısal2 iki yönlü bağlamayı test etmeye çalışıyorum input. İşte hata:

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');
  }));  
});

Yanıtlar:


216

Sen aktarmanız gerekir FormsModuleiçine TestBedconfigfuration.

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

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

Bununla yaptığınız TestBedşey, test ortamı için sıfırdan bir NgModule yapılandırmaktır. Bu, testi etkileyebilecek gereksiz dış değişkenler olmadan yalnızca test için gerekli olanı eklemenize izin verir.


42
Bu açısal şeyler çok rastgele görünüyor. Yardımın için teşekkürler.
Pete B.

11
Kabul edildi, @PeteB. Bağımlılık enjeksiyonu çok harika .... sizin için otomatik olarak her şeyi yapıyor ... SADECE BURAYA İTHALAT YAPMAYI UNUTMAYIN VE HATA_SCHEMA ve yada yda ...
Adam Hughes

Bu benim hatamdan kurtuldu, ancak Karma'da asılı kaldı ve daha sonra diğer bileşenleri oluşturmaya devam etmiyor. Şimdi hiçbir hata olmadan takıldı.
BlockchainDeveloper

1

Aynı sorunu yaşadım, formlar modülünü içe aktardıktan sonra bile bu çözülmedi. Bu yüzden metin alanı için ngModel'e bir alternatif kullanmak zorunda kaldım. Lütfen bu bağlantıyı kontrol edin :

Özet olarak, metin alanı için modeli bu şekilde bağlamak için [değer] kullandım.

([value])="searchTextValue"

Ayrıca, tarih alanını kullanıyorsanız, modeli ts cinsinden bağlamanız gerekir. html'de yöntemi çağırın

 (dateSelect)="onDateSelect($event)"

Tip komut dosyasında aşağıdaki kodu kullanın. Bu, yalnızca Ngbdate seçici kullanıyorsanız geçerlidir.

  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;
 }

Bu bana çok zaman kazandırdı. Tüm bu tuhaflıklar Angular test yataklarında. Beni delirtiyor.
kiss-o-matic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.