Tôi muốn đơn vị kiểm tra một chỉ thị mô phỏng một trình giữ chỗ, nơi giá trị đầu vào chỉ được xóa trên các sự kiện keyup/down.Làm cách nào để kích hoạt sự kiện keyup/keydown trong thử nghiệm đơn vị góc cạnh?
Trả lời
Bạn cần tạo một sự kiện theo chương trình và kích hoạt sự kiện đó. Để làm như vậy, bao gồm jQuery cho các bài kiểm tra đơn vị là khá hữu ích. Ví dụ, bạn có thể viết một tiện ích đơn giản như thế này:
var triggerKeyDown = function (element, keyCode) {
var e = $.Event("keydown");
e.which = keyCode;
element.trigger(e);
};
và sau đó sử dụng nó trong bài kiểm tra đơn vị bạn như vậy:
triggerKeyDown(element, 13);
Bạn có thể thấy kỹ thuật này trong hành động trong http://angular-ui.github.io/bootstrap/ dự án ở đây: https://github.com/angular-ui/bootstrap/blob/master/src/typeahead/test/typeahead.spec.js
Tuyên bố từ chối: hãy chính xác ở đây: Tôi không ủng hộ việc sử dụng jQuery với AngularJS! Tôi chỉ nói rằng nó là một tiện ích thao tác DOM hữu ích để viết các bài kiểm tra tương tác với DOM.
Để làm cho đoạn code làm việc trên mà không jQuery, thay đổi:
$.Event('keydown')
tới:
angular.element.Event('keydown')
Tôi đã có vấn đề với việc sử dụng câu trả lời chấp nhận. Tôi tìm thấy linh hồn khác.
var e = new window.KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
shiftKey: true
});
delete e.keyCode;
Object.defineProperty(e, 'keyCode', {'value': 27});
$document[0].dispatchEvent(e);
dụ làm việc có thể được tìm thấy here
Tôi đã sử dụng trình duyệt này để +1 nhưng có vẻ như nó không hoạt động trong PhantomJS. –
Tôi đang sử dụng Chrome trong cấu hình nghiệp của mình, bởi vì PhantomJS không hỗ trợ 'bind' –
Điều gì sẽ làm việc với PhantomJS? –
tôi có một cái gì đó giống như làm việc này.
element.triggerHandler({type:"keydown", which:keyCode});
Công trình này hoàn hảo! –
nếu bạn đang sử dụng angular2, bạn có thể kích hoạt bất kỳ sự kiện bằng cách gọi dispatchEvent(new Event('mousedown'))
trên HTMLElement
dụ. ví dụ: Thử nghiệm với góc 2.rc1
it('should ...', async(inject([TestComponentBuilder], (tcb:TestComponentBuilder) => {
return tcb.createAsync(TestComponent).then((fixture: ComponentFixture<any>) => {
fixture.detectChanges();
let com = fixture.componentInstance;
/* query your component to select element*/
let div:HTMLElement = fixture.nativeElement.querySelector('div');
/* If you want to test @output you can subscribe to its event*/
com.resizeTest.subscribe((x:any)=>{
expect(x).toBe('someValue');
});
/* If you want to test some component internal you can register an event listener*/
div.addEventListener('click',(x)=>{
expect(x).toBe('someOtherValue');
});
/* if you want to trigger an event on selected HTMLElement*/
div.dispatchEvent(new Event('mousedown'));
/* For click events you can use this short form*/
div.click();
fixture.detectChanges();
});
và cách này trả lời câu hỏi? Làm thế nào bạn có thể kích hoạt các sự kiện keyup/keydown với dispatchEvent? Sự kiện mới ('keydown.esc') không hoạt động – akcasoy
thời gian gần đây tôi muốn thử nghiệm HostListener này trên một thành phần (góc 2):
@HostListener('keydown.esc') onEsc() {
this.componentCloseFn();
};
Và sau khi tìm kiếm một thời gian, điều này đang làm việc :
..
nativeElement.dispatchEvent(new KeyboardEvent('keydown', {'key': 'Escape'}));
...
- 1. Làm cách nào để lấy tên phương thức thử nghiệm đơn vị khi chạy trong thử nghiệm đơn vị?
- 2. giả lập $ httpBackend trong các thử nghiệm góc cạnh e2e
- 3. mùi thử nghiệm đơn vị
- 4. Thử nghiệm Đơn vị Android: Gói/Bưu kiện
- 5. Icefaces thử nghiệm đơn vị
- 6. Ổn định sự kiệnBài thử nghiệm đơn vị
- 7. Thử nghiệm đơn vị với số đơn
- 8. Thử nghiệm đơn vị trong CakePHP?
- 9. Thử nghiệm Đơn vị XNA
- 10. Thử nghiệm đơn vị trong Ember.js
- 11. Làm cách nào để thực hiện một thử nghiệm đơn lẻ bằng thử nghiệm/đơn vị Ruby?
- 12. Thử nghiệm đơn vị cho một sự kiện sử dụng Tiện ích mở rộng phản ứng
- 13. Nondeterminism trong thử nghiệm đơn vị
- 14. Kiểm tra đơn vị sự kiện COM?
- 15. Thử nghiệm đơn vị trên Android NDK
- 16. VS2012 không chạy thử nghiệm đơn vị
- 17. Làm thế nào để thử một máy chủ web để thử nghiệm đơn vị trong Java?
- 18. Làm thế nào để thử nghiệm tài nguyên $ góc trong các thử nghiệm hoa nhài
- 19. Thử nghiệm đơn vị thử nghiệm Javascript Sandbox
- 20. Làm cách nào để xử lý ngoại lệ trong chuỗi nền trong thử nghiệm đơn vị?
- 21. Thử nghiệm đơn vị sau khi thử nghiệm
- 22. Thử nghiệm dương tính và thử nghiệm âm tính trong thử nghiệm đơn vị
- 23. @ExpectedException trong thử nghiệm đơn vị grails
- 24. Làm cách nào để tạo các lượt xem trong các thử nghiệm đơn vị asp.net-mvc?
- 25. Quy tắc thử nghiệm đơn vị
- 26. Thử nghiệm đơn vị C#, cách kiểm tra lớn hơn
- 27. Đơn vị thử nghiệm Ứng dụng Firemonkey
- 28. Làm cách nào để tránh nhiều lần khẳng định trong thử nghiệm đơn vị này?
- 29. Thử nghiệm đơn vị sơ bộ
- 30. Thử nghiệm đơn vị với Spring Security
Nhược điểm là jQuery sẽ dễ dàng thay thế jQueryLite bằng góc cạnh. Vì có những khác biệt về chức năng thực tế, về cơ bản bạn đang thử nghiệm một hệ thống khác (hơi) bằng cách bao gồm nó trong các bài kiểm tra đơn vị của bạn. – Cornelius
Có phải angular.element.Event vẫn có sẵn không? Tôi nhận được không xác định, và tôi không thể nhìn thấy bất cứ điều gì về nó trong tài liệu. https://docs.angularjs.org/api/ng/function/angular.element – Johnus
Tôi nghĩ rằng điều này không hoạt động nữa. – BuildTester1