Rob*_*nde 9 dart flutter flutter-test
我有一个应用程序,它非常简单,只有一个小部件。它工作正常,但是当我通过调用以下命令运行集成测试时:
$ flutter drive --target=test_driver/app.dart
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
请注意,当我从Android Studio运行该应用程序时,它会成功运行。但是,当我使用上面引用的命令从终端运行时,该应用程序显示白屏,并且直到出现终端错误才从那里移动。
假设这是一个路径问题,例如test_driver未找到dart:ui之类的flutter包,如何确保test_driver知道dart:ui在哪里?
Uma*_*dil 16
确保导入设置为:
import 'package:test/test.dart';
Run Code Online (Sandbox Code Playgroud)
而不是这个:
import 'package:flutter_test/flutter_test.dart';
Run Code Online (Sandbox Code Playgroud)
这是旧帖子,但我发现测试给我这个错误的另一个可能原因:
当我创建新的Bloc类时,我创建了带@required
注释的构造函数,当我使用 Option+Enter 导入适当的库时,Android Studio 导入了'package:flutter/cupertino.dart'
库而不是,'package:meta/meta.dart'
这就是我的单元测试没有开始的原因。
导入正确的库后,所有测试都通过了!
很高兴测试您的代码!:D
集成测试不能导入您的主要App代码或在App中运行的其他Flutter代码-否则,它们将因您看到的错误而失败。
阅读https://flutter.io/cookbook/testing/integration-test-introduction/,因为这提供了一个集成测试示例,其中包含一个应用程序起点,允许您在运行实际驱动程序测试之前运行设置代码(如果这样做)是您想要做的。否则,请勿使用使用您的主代码中的常量的键值(如此处http://cogitas.net/write-integration-test-flutter/所述)。
这是添加这些测试用例的解决方案:
在 Android Studio 的运行下拉菜单中,您
我收到这些错误是因为我试图在 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();
}
}
Run Code Online (Sandbox Code Playgroud)
为了检查它是否显示在屏幕上,我在 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);
});
});
}
Run Code Online (Sandbox Code Playgroud)
其中键定义是第一个文件中所需的键定义,然后,find.byValueKey 和await 驱动程序是测试文件中的必需项。
归档时间: |
|
查看次数: |
5296 次 |
最近记录: |