42

我有一个应用程序,它非常简单,只有一个小部件。它工作正常,但是当我通过调用运行集成测试时:

$ 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 这样的颤振包,我如何确保 test_driver 知道 dart:ui 在哪里?

4

10 回答 10

21

确保导入设置为此:

import 'package:test/test.dart';

而不是这个:

import 'package:flutter_test/flutter_test.dart';
于 2019-07-24T09:40:59.300 回答
20

集成测试不能导入您的主 App 代码或在 App 中运行的其他颤振代码 - 否则它们将因您看到的错误而失败。

阅读https://flutter.io/cookbook/testing/integration-test-introduction/,因为它提供了一个集成测试示例,其中包含一个应用程序起点,允许您在实际驱动程序测试运行之前运行设置代码,如果这样是你想要做的。否则,不要使用使用主代码中的常量的键值(如此处所述http://cogitas.net/write-integration-test-flutter/)。

于 2018-09-25T20:02:26.237 回答
10

这是旧帖子,但我发现 test 给我这个错误的另一个可能原因:

当我创建新的Bloc类时,我创建了带有@required注释的构造函数,当我使用 Option+Enter 导入适当的库时,Android Studio 导入'package:flutter/cupertino.dart'了库而不是,'package:meta/meta.dart'这就是我的单元测试一开始没有开始的原因。

导入正确的库后,所有测试都通过了!

快乐地测试你的代码!:D

于 2020-05-21T13:57:01.670 回答
9

这是添加这些测试用例的解决方案:

在运行下拉列表中的 Android Studio 中,您

  1. 选择编辑配置
  2. 按 + 按钮并选择 Flutter 测试
  3. 确保测试范围是文件中的全部并将其指向您的测试文件。您现在可以运行单个测试文件,也可以通过在运行下拉菜单中选择此配置在 android studio 中对其进行调试。
于 2020-08-17T22:43:17.360 回答
4

从测试驱动程序的代码中删除对 package:flutter/... 的所有导入,例如:

导入“包:颤振/widgets.dart”;

于 2019-07-16T23:31:31.443 回答
3

我收到这些错误是因为我试图在 test_driver 文件上导入一个小部件。如果我尝试使用 find.byWidget,我也会遇到同样的错误。

我试图导入小部件或使用 find.byWidget 因为我想检查屏幕上是否存在小部件。

这些错误非常类似于

内置库 'dart:ui' 在独立 VM 上不可用。

然后,为了在 test_driver 文件中检查屏幕上是否存在小部件,我不得不使用 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);
    });
  });
}

其中 key 定义是第一个文件中的必需项,然后 find.byValueKey 和 await 驱动程序是测试文件中的必需品。

于 2018-09-30T10:08:13.283 回答
2

不要简单地运行测试。它以虚拟方式运行 pp。所以我们不能导入dart: UI。它会给出错误。使用命令 flutter drive --target=test_driver/app.dart对其进行测试。

于 2020-03-28T03:07:59.057 回答
0

最后,我在我的应用程序中运行了小部件测试。

这个解决方案对我有用。

我找到了原因,我选择了第一个选项而不是颤振测试。我是多么愚蠢,现在从配置中删除这个错误的测试类型并使用颤振测试运行。 查看有关在 Android Studio 中运行的图像

于 2021-07-23T15:17:24.083 回答
0

只需检查您是否没有加载颤振包的导入。

在我的情况下,我从我的文件中导入了“cupertino”包,app_keys.dart其中列出了格式中的所有键Key('<something>')

但!!UI 测试使用Key('<something>')常量Finder集成测试- 简单的字符串。

参考

于 2021-08-21T21:13:52.073 回答
0

在 Android Studio 中,右键单击项目树中的测试文件并选择“运行”。您应该看到 2 个选项:

在此处输入图像描述

确保选择第二个选项:“widget_test 中的测试...”

如果您选择第一个选项,您将看到错误:未找到:'dart:ui',并且您将失去从“运行”上下文菜单中进行选择的选项。

于 2021-11-20T08:34:39.593 回答