我有一个应用程序,它非常简单,只有一个小部件.它工作得很好,但是当我通过调用以下命令运行集成测试时:

$ flutter drive --target=test_driver/app.dart 

我得到以下错误:

 file:///Users/myuser/flutter/packages/flutter_test/lib/src/accessibility.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/binding.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/matchers.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/matchers.dart:9:8: Error: Not found: 'dart:ui'
import 'dart:ui';
       ^
file:///Users/myuser/flutter/packages/flutter_test/lib/src/test_pointer.dart:12:1: Error: Not found: 'dart:ui'
export 'dart:ui' show Offset;
^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/binding.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show window;
       ^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/box.dart:6:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show lerpDouble;
       ^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/debug_overflow_indicator.dart:6:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui;
       ^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/editable.dart:8:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show TextBox;
       ^
file:///Users/myuser/flutter/packages/flutter/lib/src/rendering/error.dart:5:8: Error: Not found: 'dart:ui'
import 'dart:ui' as ui show Paragraph, ParagraphBuilder, ParagraphConstraints, ParagraphStyle, TextStyle;
       ^
Stopping application instance.
Driver tests failed: 254

请注意,当我从Android Studio运行该应用程序时,它运行成功.但是,当我使用上面引用的命令从终端运行时,应用程序显示一个白屏,并且它不会从那里移动,直到我在终端上收到错误.

假设这是一个路径问题,比如test_driver找不到像dart:ui这样的Flutter 包,我如何才能确保test_driver知道dart:ui在哪里呢?

推荐答案

我收到这些错误是因为我试图导入test_driver文件中的小部件.如果我try 使用find.byWidget,也会得到相同的错误.

我试图导入一个小部件或使用find.byWidget,因为我想判断屏幕上是否存在一个小部件.

这些错误与

内置库‘DART:UI’在独立VM上不可用.

然后,为了在测试驱动程序文件中判断屏幕上是否存在小部件,我必须使用find.byKeyValue.例如,给定以下在我的应用程序中的文件中定义的虚拟小部件:

class MyDummyWidget extends StatelessWidget {

  MyDummyWidget(): super(key: new Key('MyDummyWidget'));

  @override
  Widget build(BuildContext context) {
    return Center();
  }
}

为了判断它是否显示在屏幕上,我在test_driver中定义了以下测试:

void main() {
  group('My tests', () {
    FlutterDriver driver;
    SerializableFinder myDummyWidget = find.byValueKey('MyDummyWidget');

    setUpAll(() async {
      driver = await FlutterDriver.connect();
    });

    tearDownAll(() async {
      if (driver != null) {
        driver.close();
      }
    });

    test('check if MyDummyWidget is being displayed', () async {
      await driver.waitFor(myDummyWidget);
    });
  });
}

其中键定义是第一个文件中所需的定义,然后find.byValueKey和await驱动程序定义是测试文件中的要点.

Flutter相关问答推荐

如何在容器中移动图标按钮?

Flutter Riverpod,将默认的BTC值改写为我的新状态

如何在Flutter 中使用滚动展开窗口小部件

如何在巡逻测试期间重新启动dart 侧应用程序状态?

在 Flutter 中滑动关闭 PageView.builder 时出现问题

自定义绘画未显示 - Flutter

无状态和有状态小部件,我可以同时使用吗?

在 Flutter 中解码 BLE 设备负载

在参数为空时保持命名参数的默认值

Riverpod 2.3.6:AutoDisposeNotifier和ref.onDispose自动处理

为什么我们需要使用ChangeNotifierProvider而不是仅仅使用ChangeNotifier?

使用堆栈的自定义按钮

Flutter可滚动定位列表支持rtl方向吗?

如何根据应用程序主题(深色和浅色)更改谷歌 map 的主题?

Pub get 尚未运行

Flutter 活跃的互联网连接

扫描flutter生成的二维码后如何弹出文本字段值

type '_InternalLinkedHashMap' 不是使用 http 包的'String' 类型的子类型

一个或多个插件需要更高的 Android SDK 版本

try 为两个下拉值添加共享首选项,但在 Flutter 上显示错误断言失败:?