如何解决在Flutter上运行集成测试时未找到:“ dart:ui”错误

时间:2018-09-23 03:13:45

标签: dart flutter flutter-test

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

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

8 个答案:

答案 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的“运行”下拉列表中,您

  1. 选择“编辑配置”
  2. 按下+按钮并选择Flutter test
  3. 确保“测试”范围是“全部在文件中”,并将其指向您的测试文件。 现在,您可以运行单个测试文件,也可以通过在运行下拉菜单中选择此配置,在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