unit-testing - 以编程方式模拟 Google Dart 中单元测试的用户交互

标签 unit-testing dart dart-html

我正在尝试为一个相当复杂的菜单编写一些单元测试,并且我想模拟用户与该菜单的交互。

我发现可以用querySelector("#myElement").click()来模拟点击但我希望能够触发更复杂的事件,例如 mouseDowndocument 的特定位置, mouseMove , touchStarttouchEnd

最佳答案

我找到了一种方法来做到这一点。它仍然不完整或不完美,但它提供了一些我需要的东西。

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

我的想法来自:Async and User Input Testing in Dart

关于unit-testing - 以编程方式模拟 Google Dart 中单元测试的用户交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258946/

相关文章:

dart - 更改DART中svg行的长度

javascript - 如果功能 A 使用功能 B 并且我测试功能 A,它是集成测试吗?

java - 发布阶段的Maven测试依赖

json - Flutter-在空调用方法 '[]'

Flutter 在更新后无法识别它自己的名为参数的小部件

dart - 类重置变量

dart - Dart:如何以编程方式将标题添加到 'pop-up'窗口?

c# - 这应该被 mock 还是被打断?

javascript - 为什么在 karma 和 jasmine 中运行测试时 fs.readFile 不是一个函数?

flutter - 如何在 flutter 中将 child 定位在堆栈中?