web-dev-qa-db-ja.com

解決方法見つかりません:Flutterで統合テストを実行中に「Dart:ui」エラーが発生しました

私はアプリを持っています。それは非常にシンプルで、ウィジェットは1つしかありません。正常に動作していますが、以下を呼び出して統合テストを実行すると:

$ 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
RobertoAllende

統合テストでは、メインアプリコードまたはアプリで実行されるその他のフラッターコードをインポートできません。そうしないと、表示されたエラーで失敗します。

https://flutter.io/cookbook/testing/integration-test-introduction/ を読んでくださいこれがあなたがしたいことであるなら、あなたの実際のドライバーテストが実行されます。それ以外の場合は、メインコードの定数を使用するキー値を使用しないでください(ここで説明したように、 http://cogitas.net/write-integration-test-flutter/ )。

6
Chris

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);
    });
  });
}

キー定義が最初のファイルで必要な定義であり、その後、find.byValueKeyおよびawaitドライバーの定義がテストファイルで不可欠です。

2
RobertoAllende

インポートが次のように設定されていることを確認してください。

import 'package:test/test.Dart';

これの代わりに:

import 'package:flutter_test/flutter_test.Dart';
1
Umair Adil

次のように、テストドライバーのコードからpackage:flutter/...へのすべてのインポートを削除します。

import 'package:flutter/widgets.Dart';

0
Roger Gusmao