2014-04-24 1 views
2

다소 복잡한 메뉴에 대한 단위 테스트를 작성하려고하는데이 메뉴와의 사용자 상호 작용을 시뮬레이션하고 싶습니다. 프로그래밍 방식으로 Google 다트의 단위 테스트를위한 사용자 상호 작용 시뮬레이션

가 나는 querySelector("#myElement").click()으로 클릭을 시뮬레이션하는 것이 가능하다는 것을 발견하지만 난 등의 document, mouseMove, touchStarttouchEnd의 특정 장소에 mouseDown 같은 더 복잡한 이벤트를 트리거 할 수

답변

2
싶습니다

나는 그것을하는 방법을 발견했다. 그것은 여전히 ​​완전하지도 완벽하지도 않지만, 내가 필요한 것을 조금 제공합니다. Async and User Input Testing in Dart

:

import 'dart:html'; 
import 'dart:async'; 


void main() { 

    // Create the target element. 
    DivElement menuSprite = new DivElement() 
    ..style.height = "50px" 
    ..style.width = "50px" 
    ..style.border = "1px solid black"; 
    document.body.children.add(menuSprite); 

    // Asign event listeners. 
    menuSprite 
    ..onMouseDown.listen((e) => menuSprite.style.backgroundColor = "red") 
    ..onMouseUp.listen((e) => menuSprite.style.backgroundColor = "blue") 
    ..onTouchStart.listen((e) => menuSprite.style.backgroundColor = "orange") 
    ..onTouchEnd.listen((e) => menuSprite.style.backgroundColor = "brown"); 

    // Create the events. 
    // TODO: Events have more parameters or be more specific. 
    // See: 
    // * https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-dom-html.MouseEvent 
    // * https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-dom-html.TouchEvent 
    // 
    // CAUTION: event type is case sensitive ('mouseDown' desn't work). 
    Event myMouseDown = new Event('mousedown'); 
    Event myMouseUp = new Event('mouseup'); 
    Event myTouchStart = new Event('touchstart'); 
    Event myTouchEnd = new Event('touchend'); 
    // TODO: mouseMove and touchMove events. 

    // We can fire the events using "Element.dispatchEvent()". 
    new Future.delayed(new Duration(milliseconds: 500),() => 
     menuSprite.dispatchEvent(myMouseDown)); 
    new Future.delayed(new Duration(milliseconds: 1000),() => 
     menuSprite.dispatchEvent(myMouseUp)); 
    new Future.delayed(new Duration(milliseconds: 1500),() => 
     menuSprite.dispatchEvent(myTouchStart)); 
    new Future.delayed(new Duration(milliseconds: 2000),() => 
     menuSprite.dispatchEvent(myTouchEnd)); 
} 

나는에서 생각이있어

관련 문제