我有一个应用程序,它非常简单,只有一个小部件。一切正常,但是当我通过调用运行集成测试时:
$ 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在哪里?
答案 0 :(得分:6)
这是旧帖子,但是我发现测试给 me 这个错误的另一个可能原因:
当我创建新的 Bloc 类时,我创建了带有@required
批注的构造函数,并且当我使用Option + Enter导入适当的库时,Android Studio导入了'package:flutter/cupertino.dart'
库,而不是'package:meta/meta.dart'
,这就是我的单元测试没有首先开始的原因。
导入正确的库后,所有测试均已通过!
祝您测试代码愉快! :D
答案 1 :(得分:5)
集成测试不能导入您的主应用代码或应用中运行的其他波动代码-否则它们将因您看到的错误而失败。
请阅读https://flutter.io/cookbook/testing/integration-test-introduction/,因为这提供了一个集成测试示例,其中包含一个应用程序起点,允许您在实际驱动程序测试运行之前运行设置代码(如果您要这样做)。否则,请勿使用使用主代码中的常量的键值(如此处http://cogitas.net/write-integration-test-flutter/所述)。
答案 2 :(得分:2)
我遇到这些错误是因为我试图在test_driver文件上导入小部件。如果我尝试使用find.byWidget,也会遇到相同的错误。
我想导入窗口小部件或使用find.byWidget,因为我想检查屏幕上是否存在窗口小部件。
这些错误与
非常相似内置VM'dart:ui'在独立VM上不可用。
然后,为了检查test_driver文件中屏幕上是否存在小部件,我不得不使用find.byKeyValue。例如,给定以下虚拟小部件,该小部件在我的应用程序的文件中定义:
app.post('/login',function(req,res){
credential.findOne({uname: req.body.uname, password:req.body.password}, function(err,isMatch){
if(err){
res.status(500).send(err);
}
else{
if(isMatch){
res.status(200).send("You are logged in succesfully.");
}
else{
res.status(200).send("User not found");
}
}
});
});
要检查它是否显示在屏幕上,我在test_driver中定义以下测试:
class MyDummyWidget extends StatelessWidget {
MyDummyWidget(): super(key: new Key('MyDummyWidget'));
@override
Widget build(BuildContext context) {
return Center();
}
}
在第一个文件中需要键定义的地方,然后在测试文件中必须使用find.byValueKey和await驱动程序。
答案 3 :(得分:2)
不要简单地运行测试。它实际上在运行pp。因此,我们无法导入dart: UI
。它会给出错误。使用命令
flutter drive --target=test_driver/app.dart
进行测试。
答案 4 :(得分:2)
以下是添加这些测试用例的解决方案:
在Android Studio的“运行”下拉列表中,您
答案 5 :(得分:0)
将所有导入内容从测试驱动程序的代码中删除到package:flutter / ...,例如:
import'package:flutter / widgets.dart';
答案 6 :(得分:0)
确保将导入设置为此:
import 'package:test/test.dart';
代替此:
import 'package:flutter_test/flutter_test.dart';
答案 7 :(得分:0)
最后,我在我的应用中运行了小部件测试。
这个解决方案对我有用。
<块引用>我找到了原因,我选择了第一个选项而不是颤振测试。我是多么愚蠢,现在从配置中删除这个错误的测试类型并使用 flutter test 运行现在可以工作了。 See the image about run in Android Studio