[英]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 在哪里?
集成测试不能导入您的主应用程序代码或在应用程序中运行的其他颤振代码 - 否则它们将因您看到的错误而失败。
阅读https://flutter.io/cookbook/testing/integration-test-introduction/因为这给出了一个带有应用程序起点的集成测试示例,允许您在实际驱动程序测试运行之前运行设置代码,如果这样的话是您要执行的操作。 否则,不要使用使用主代码中常量的键值(如此处提到的http://cogitas.net/write-integration-test-flutter/ )。
确保导入设置为:
import 'package:test/test.dart';
而不是这个:
import 'package:flutter_test/flutter_test.dart';
这是旧帖子,但我发现测试给我这个错误的另一个可能原因:
当我创建新的Bloc类时,我创建了带有@required
注释的构造函数,当我使用 Option+Enter 导入适当的库时,Android Studio 导入了'package:flutter/cupertino.dart'
库而不是'package:meta/meta.dart'
这就是我的单元测试一开始没有开始的原因。
导入正确的库后,所有测试都通过了!
很高兴测试您的代码! :D
这是添加这些测试用例的解决方案:
在 Android Studio 的运行下拉菜单中,您
从测试驱动程序的代码中删除对 package:flutter/... 的所有导入,例如:
导入 'package:flutter/widgets.dart';
我收到这些错误是因为我试图在 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驱动程序是测试文件中必不可少的。
不要简单地运行测试。 它实际上正在运行 pp。 所以我们不能导入dart: UI
。 它会给出错误。 使用命令flutter drive --target=test_driver/app.dart
进行测试。
最后,我在我的应用程序中运行了小部件测试。
这个解决方案对我有用。
我找到了原因,我选择了第一个选项而不是颤振测试。 我是多么愚蠢,现在从配置中删除这个错误的测试类型并使用 flutter test 运行现在可以工作了。 查看关于在 Android Studio 中运行的图像
只需检查您是否没有加载颤振包的导入。
就我而言,我从我的文件app_keys.dart
导入了 'cupertino' 包,它以Key('<something>')
格式列出了所有键。
但!! UI 测试使用Key('<something>')
常量进行Finder
但集成测试- 简单字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.