【问题标题】:How to solve Not found: 'dart:ui' error while running integration tests on Flutter如何解决在 Flutter 上运行集成测试时出现 Not found: 'dart:ui' 错误
【发布时间】:2023-04-04 16:05:01
【问题描述】:

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

$ 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 在哪里?

【问题讨论】:

  • Flutter 驱动测试由两部分组成。一部分是在模拟器/设备中运行的代码,另一部分是驱动前一部分代码的代码。后面的代码不能导入dart:ui,不能直接也不能传递。
  • 只要确保你的导入是 import 'package:flutter_driver/flutter_driver.dart';import 'package:test/test.dart';
  • 嗨@RobertoAllende,您的问题有什么更新吗?请写一个答案如果你找到了解决方案,因为我想我有这样的问题。 tq
  • @MNFS 对我来说答案是我已经发布的答案。我只是标记为答案,因为那是解决我问题的答案。

标签: dart flutter flutter-test


【解决方案1】:

确保导入设置为:

import 'package:test/test.dart';

而不是这个:

import 'package:flutter_test/flutter_test.dart';

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • 谢谢,它对我有用!就像我检查运行设置代码时一样
【解决方案3】:

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

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

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

祝您测试代码愉快! :D

【讨论】:

  • 这也是我的问题!我正在导入'package:flutter/foundation.dart'。我切换到 package:meta/meta.dart' 并且错误消失了。谢谢!
【解决方案4】:

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

在 Android studio 中的运行下拉菜单中

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

【讨论】:

    【解决方案5】:

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

    导入'package:flutter/widgets.dart';

    【讨论】:

      【解决方案6】:

      我收到这些错误是因为我试图在 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 驱动程序是测试文件中的必需品。

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          这个解决方案对我有用。

          我找到了原因,我选择了第一个选项而不是颤振测试。我是多么愚蠢,现在从配置中删除这个错误的测试类型并使用颤振测试运行。 See the image about run in Android Studio

          【讨论】:

          • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
          【解决方案9】:

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

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

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

          Reference

          【讨论】:

            【解决方案10】:

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

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

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

            【讨论】:

              猜你喜欢
              • 2021-03-04
              • 2015-08-11
              • 1970-01-01
              • 1970-01-01
              • 2017-11-25
              • 1970-01-01
              • 1970-01-01
              • 2021-01-12
              • 1970-01-01
              相关资源
              最近更新 更多