2016-12-14 28 views
6

Verileri, filtre metni olarak kullanılan girişten almak için bir yönergeyi kullanıyorum. Bu kod mükemmel çalışıyorAngular 2 birim testinde tuş bastırma olayını simüle edemiyorum (Jasmine)

@HostListener('input', ['$event.target.value']) 
    public onChangeFilter(event: any): void { 
    console.log('input event fired, value: ' + event); 
    this.columnFiltering.filterString = event; 
    this.filterChanged.emit({filtering: this.columnFiltering}); 
    } 

, ben aynı birim testi alamıyorum:

burada yönergede benim hostlistener olduğunu.

Değeri kontrol etmek için benim birim testimde filterChanged EventEmitter öğesine abone oldum.

Değeri değiştirmek için ve aynı zamanda ayarları değer özniteliğini denemek için tuşa basma olayını taklit etmeyi denedim. Bunların hiçbiri benim için çalışmıyor. ,

let attrs = inputElement.attributes; 
     inputElement.setAttribute('value', 'abc'); 
     for (let i = attrs.length - 1; i >= 0; i--) { 
     // Attribute value is set correctly 
     if (attrs[i].name === 'value') { 
     console.log(attrs[i].name + "->" + attrs[i].value); 
     } 
     } 

kimse bana yardım edebilir nasıl birim test aynı yapabilirsiniz:

describe('Table View',() => { 
    let fixture: ComponentFixture<any>; 
    let context: TableComponent; 
    beforeEach(() => { 
    TestBed.configureTestingModule({ 
      providers: [ 
      TableComponent, 
      ], 
      imports: [TableModule], 
     }); 
     fixture = TestBed.createComponent(TableComponent); 
     context = fixture.componentInstance; 
    }); 
it('should allow filter',() => { 
     const element = fixture.nativeElement; 
     context.config = config; 
     fixture.detectChanges(); 

     let tableChangeCount = 0; 
     let tableEvent: any; 
     context.tableChanged.subscribe((event: any) => { 
     tableChangeCount++; 
     tableEvent = event; 
     }); 
     // Check if table exists 
     let inputElement = element.querySelectorAll('tr')[1].querySelector('input'); 
    let e = new KeyboardEvent("keypress", { 
      key: "a", 
      bubbles: true, 
      cancelable: true, 
      }); 
      inputElement.dispatchEvent(e); 
}); 

}); 

ben ayar değeri çalıştı: Burada

benim özellik dosyası nedir?

+0

_ "Burada benim spec dosyam: "_ ... bir _complete_ testini gösterebilir, böylece ne yaptığınızı ve neyi yanlış yaptığınızı öğrenebiliriz. –

+0

tam test testini ekledi, sıralamak ve yenilemek için bir düğme tıkladı, düzgün çalışıyor ... m burada takılıyorum – Akanksha

+0

Beklentiniz nerede? –

cevap

11

Ayrıca bir birim testinde bir tuşa basma konusunda bazı problemler yaşadım. Ama Seyed Jalal Hosseini'nin bir cevabıyla karşılaştım. Senin peşinde olduğun şey olabilir.

Tuşa basmayı simüle etmeye çalışıyorsanız, öğeye dispatchEvent(new Event('keypress')); numaralı telefonu arayarak bir olayı tetikleyebilirsiniz. İşte

Ben bahsediyorum cevaptır fazla ayrıntı veren: Eğer basılmış anahtarını ayarlamak istiyorsanız https://stackoverflow.com/a/37956877/4081730

, bu da yapılabilir.

const event = new KeyboardEvent("keypress",{ 
    "key": "Enter" 
}); 
el.dispatchEvent(event); 

fazla bilgi sadece rastladım: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

1

siz ("hangi" veya) anahtar kodu kullanmak isterseniz, bunu yapabilirsiniz:

// @HostListener('document:keypress') 

const escapeEvent: any = document.createEvent('CustomEvent'); 
escapeEvent.which = 27; 
escapeEvent.initEvent('keypress', true, true); 
document.dispatchEvent(escapeEvent); 
İlgili konular