2016-12-14 25 views
6

Tôi đang sử dụng chỉ thị để lấy dữ liệu từ đầu vào được sử dụng làm văn bản lọc.Không thể mô phỏng sự kiện nhấn phím trong thử nghiệm đơn vị Angular 2 (Jasmine)

đây là hostlistener tôi trong chỉ thị:

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

mã này đang làm việc một cách hoàn hảo, tôi không thể kiểm tra đơn vị giống nhau.

Tôi đã đăng ký với bộ lọc EventEmitter bị thay đổi, trong bài kiểm tra đơn vị của tôi để kiểm tra giá trị.

Tôi đã thử mô phỏng sự kiện nhấn phím để thay đổi giá trị và cũng đã thử thuộc tính giá trị cài đặt. Không ai trong số này đang làm việc cho tôi.

đây là file spec của tôi:

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

}); 

tôi đã cố gắng thiết lập giá trị:

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

bất cứ ai có thể vui lòng giúp tôi, làm thế nào tôi có thể kiểm tra đơn vị giống nhau không?

+0

_ "đây là tệp đặc tả của tôi: "_ ... bạn có thể hiển thị thử nghiệm _complete_ để chúng tôi có thể thử và tìm hiểu xem bạn đang làm gì sai không. –

+0

thêm kiểm tra thử nghiệm đầy đủ, có một nút bấm để sắp xếp và làm mới, hoạt động của nó một cách chính xác .. m bị mắc kẹt ở đây – Akanksha

+0

Mong đợi của bạn ở đâu? –

Trả lời

11

Tôi đã gặp một số sự cố khi mô phỏng một lần nhấn phím trong thử nghiệm đơn vị. Nhưng đi qua một câu trả lời của Seyed Jalal Hosseini. Nó có thể là những gì bạn đang sau.

Nếu bạn đang cố gắng mô phỏng bấm phím, bạn có thể kích hoạt sự kiện bằng cách gọi dispatchEvent(new Event('keypress')); trên phần tử.

Dưới đây là câu trả lời tôi đề cập đến đó cung cấp cho biết thêm chi tiết: https://stackoverflow.com/a/37956877/4081730

Nếu bạn muốn thiết lập phím được nhấn, điều này có thể được thực hiện cũng có.

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

Thông tin thêm Tôi vừa mới đi qua: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

1

Nếu bạn muốn sử dụng một mã khóa (hoặc "mà"), bạn có thể làm điều này:

// @HostListener('document:keypress') 

const escapeEvent: any = document.createEvent('CustomEvent'); 
escapeEvent.which = 27; 
escapeEvent.initEvent('keypress', true, true); 
document.dispatchEvent(escapeEvent); 
Các vấn đề liên quan