dragstart
이벤트 를 취소하는 데 목적이있는 매우 간단한 지시문이 있습니다 .
link: function(scope, element) {
element.on('dragstart', function(e) {
e.preventDefault();
})
}
Jasmine 테스트에서 어떻게 테스트 할 수 있습니까? Event 개체를 감시하고 처리기에 전달하는 다음 테스트가 있습니다.
var mockEvent;
beforeEach(function() {
mockEvent = new Event('dragstart');
spyOn(mockEvent,'preventDefault');
});
it('should call preventDefault', function () {
element.triggerHandler('dragstart', mockEvent);
expect(mockEvent.preventDefault).toHaveBeenCalled();
});
그러나 테스트는 실패합니다. 이 Plunker에서 볼 수 있습니다 . . 이것을 어떻게 테스트 할 수 있습니까 (/ 리팩터링하여 테스트 가능하게 만들기 위해)?
편집 : jQuery를 포함하지 않는 것이 이상적입니다. 편집 : 변경된 태그
Angular의 현재 안정 버전 인 1.3.14에서는 이벤트를의 첫 번째이자 유일한 매개 변수로 전달하여 jQuery없이이 작업을 수행 할 수 triggerHandler
있으므로 질문에서 제안한 내용 대신
element.triggerHandler('dragstart', new Event('dragstart'));
당신은 쓸 수 있습니다
element.triggerHandler(new Event('dragstart'));
기능에 스파이를 추가하려면 preventDefault
원래 질문에 따라 다음을 수행 할 수 있습니다.
var mockEvent;
beforeEach(function() {
mockEvent = new Event('dragstart');
spyOn(mockEvent, 'preventDefault');
});
it('should call preventDefault', function () {
element.triggerHandler(mockEvent);
expect(mockEvent.preventDefault).toHaveBeenCalled();
});
이 Plunker에서 작동하는 것을 볼 수 있습니다 . 또는 최소한 type
키가 있는 일반 객체를 사용할 수 있으므로이 경우
mockEvent = {
type: 'dragstart',
preventDefault: jasmine.createSpy('preventdefault')
};
이 Plunker에서 작동하는 것을 볼 수 있습니다.
나는 이것이이 커밋 에서 1.3 브랜치에 추가되었다고 믿는다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다