如何解决 Not found: 'dart:ui' error while 运行 integration tests on Flutter
How to solve Not found: 'dart:ui' error while running integration tests on Flutter
我有一个应用程序,它非常简单,只有一个小部件。它工作正常,但是当我通过调用 运行 集成测试时:
$ 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 在哪里?
集成测试不能导入您的主应用程序代码或应用程序中运行的其他 flutter 代码 - 否则它们将因您看到的错误而失败。
阅读 https://flutter.io/cookbook/testing/integration-test-introduction/ as this gives an example of integration tests with an app starting point that allows you to run setup code before your actual driver tests run if this is what you are looking to do. Otherwise don't use key values that use constants from your main code (as mentioned here http://cogitas.net/write-integration-test-flutter/)。
我收到这些错误是因为我试图在 test_driver 文件中导入小部件。如果我尝试使用 find.byWidget,我也会遇到同样的错误。
我正在尝试导入小部件或使用 find.byWidget,因为我想检查屏幕上是否存在小部件。
这些错误与
非常相似
The built-in library 'dart:ui' is not available on the stand-alone 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 driver是测试文件中的要点。
从测试驱动程序的代码中删除对 package:flutter/... 的所有导入,例如:
import 'package:flutter/widgets.dart';
确保导入设置为:
import 'package:test/test.dart';
而不是这个:
import 'package:flutter_test/flutter_test.dart';
不要简单地运行 测试。它实际上是 运行宁 pp。所以我们无法导入dart: UI
。它会给出错误。使用命令
flutter drive --target=test_driver/app.dart
进行测试。
这是旧的 post,但我发现测试给 我 这个错误的另一个可能原因:
当我创建新的 Bloc class 我创建了带有 @required
注释的构造函数,当我使用 Option+Enter 导入适当的库时,Android Studio 导入了 'package:flutter/cupertino.dart'
库而不是 'package:meta/meta.dart'
,这就是我的单元测试最初没有开始的原因。
导入正确的库后,所有测试均已通过!
祝您代码测试愉快! :D
下面是添加这些测试用例的解决方案:
在 Android 工作室的 运行 下拉菜单中
- select 编辑配置
- 按下 + 按钮并select Flutter 测试
- 确保测试范围是全部在文件中并将其指向您的测试文件。
您现在可以 运行 单独的测试文件,也可以通过 select 在 运行 drop-down.
中使用此配置在 android studio 中对其进行调试
最后,我在我的应用程序中进行了 运行 小部件测试。
这个解决方案对我有用。
I found out why, I chose the first option instead of the flutter test. how silly I was, now removing this wrong test type from configuration and run with flutter test works now.
See the image about run in Android Studio
只需检查您没有加载 flutter 包的导入。
在我的例子中,我从我的文件 app_keys.dart
中导入了 'cupertino' 包,它以 Key('<something>')
.
的格式列出了所有键
但是!! UI 测试 使用 Key('<something>')
常量 Finder
但 集成测试 - 简单字符串。
在 Android Studio 中,右键单击项目树中的测试文件和 select“运行”。您应该看到 2 个选项:
确保 select 第二个选项:“在 widget_test 中测试...”
如果您 select 第一个选项,您将看到 错误:未找到:'dart:ui' 并且您失去了创建 [=24] 的选项=]ion 来自 运行 上下文菜单。
我有一个应用程序,它非常简单,只有一个小部件。它工作正常,但是当我通过调用 运行 集成测试时:
$ 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 在哪里?
集成测试不能导入您的主应用程序代码或应用程序中运行的其他 flutter 代码 - 否则它们将因您看到的错误而失败。
阅读 https://flutter.io/cookbook/testing/integration-test-introduction/ as this gives an example of integration tests with an app starting point that allows you to run setup code before your actual driver tests run if this is what you are looking to do. Otherwise don't use key values that use constants from your main code (as mentioned here http://cogitas.net/write-integration-test-flutter/)。
我收到这些错误是因为我试图在 test_driver 文件中导入小部件。如果我尝试使用 find.byWidget,我也会遇到同样的错误。
我正在尝试导入小部件或使用 find.byWidget,因为我想检查屏幕上是否存在小部件。
这些错误与
非常相似The built-in library 'dart:ui' is not available on the stand-alone 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 driver是测试文件中的要点。
从测试驱动程序的代码中删除对 package:flutter/... 的所有导入,例如:
import 'package:flutter/widgets.dart';
确保导入设置为:
import 'package:test/test.dart';
而不是这个:
import 'package:flutter_test/flutter_test.dart';
不要简单地运行 测试。它实际上是 运行宁 pp。所以我们无法导入dart: UI
。它会给出错误。使用命令
flutter drive --target=test_driver/app.dart
进行测试。
这是旧的 post,但我发现测试给 我 这个错误的另一个可能原因:
当我创建新的 Bloc class 我创建了带有 @required
注释的构造函数,当我使用 Option+Enter 导入适当的库时,Android Studio 导入了 'package:flutter/cupertino.dart'
库而不是 'package:meta/meta.dart'
,这就是我的单元测试最初没有开始的原因。
导入正确的库后,所有测试均已通过!
祝您代码测试愉快! :D
下面是添加这些测试用例的解决方案:
在 Android 工作室的 运行 下拉菜单中
- select 编辑配置
- 按下 + 按钮并select Flutter 测试
- 确保测试范围是全部在文件中并将其指向您的测试文件。 您现在可以 运行 单独的测试文件,也可以通过 select 在 运行 drop-down. 中使用此配置在 android studio 中对其进行调试
最后,我在我的应用程序中进行了 运行 小部件测试。
这个解决方案对我有用。
I found out why, I chose the first option instead of the flutter test. how silly I was, now removing this wrong test type from configuration and run with flutter test works now. See the image about run in Android Studio
只需检查您没有加载 flutter 包的导入。
在我的例子中,我从我的文件 app_keys.dart
中导入了 'cupertino' 包,它以 Key('<something>')
.
但是!! UI 测试 使用 Key('<something>')
常量 Finder
但 集成测试 - 简单字符串。
在 Android Studio 中,右键单击项目树中的测试文件和 select“运行”。您应该看到 2 个选项:
确保 select 第二个选项:“在 widget_test 中测试...”
如果您 select 第一个选项,您将看到 错误:未找到:'dart:ui' 并且您失去了创建 [=24] 的选项=]ion 来自 运行 上下文菜单。