简体   繁体   中英

How to solve Not found: 'dart:ui' error while running integration tests on Flutter

I have an app, it is very simple and have just one widget. It is working fine, however when I run integration test by calling:

$ flutter drive --target=test_driver/app.dart 

I get the following error:

 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

Note that when I run the app from Android Studio, it runs successfully. But when I run from terminal using the command quoted above, the app shows a white screen and it doesn't move from there until I get the error on my terminal.

Assuming it's a path issue, like test_driver not finding flutter packages like dart:ui, how can I make sure test_driver knows where dart:ui is ?

The integration tests can have no imports to your main App code or other flutter code that runs in the App - otherwise they will fail with your seen error.

Have a read of https://flutter.io/cookbook/testing/integration-test-introduction/ as this gives an example of integration tests with an app starting point that allows you to run setup code before your actual driver tests run if this is what you are looking to do. Otherwise don't use key values that use constants from your main code (as mentioned here http://cogitas.net/write-integration-test-flutter/ ).

Make sure that the import is set to this:

import 'package:test/test.dart';

instead of this:

import 'package:flutter_test/flutter_test.dart';

This is old post, but I found another possible reason why test gave me this error:

When I was creating new Bloc class I created constructor with @required annotation and when I used Option+Enter for importing appropriate library, Android Studio imported 'package:flutter/cupertino.dart' library instead of 'package:meta/meta.dart' and that is the reason my unit test didn't start in the first place.

After importing correct library, all tests have passed!

Happy testing your code! :D

Here is the solution for adding these test cases:

In Android studio in the run dropdown you

  1. select Edit Configurations
  2. Press the + button and select Flutter test
  3. Make sure the Test scope is All in file and point it at your test file. You can now run the individual test file and also debug it in android studio by selecting this configuration in the run drop-down.

Remove all imports to package:flutter/... from the test driver's code, like:

import 'package:flutter/widgets.dart';

I was getting these erros because I was trying to import a widget on a test_driver file. I also got the same error if I try to use find.byWidget.

I was trying to import a widget or use find.byWidget because I wanted to check the existence of a widget on a screen.

These erros are pretty much similar to

The built-in library 'dart:ui' is not available on the stand-alone VM.

Then, in order to check the existence of a widget on screen in a test_driver file, I had to use find.byKeyValue. For example, given the following dummy widget, defined in a file within my app:

class MyDummyWidget extends StatelessWidget {

  MyDummyWidget(): super(key: new Key('MyDummyWidget'));

  @override
  Widget build(BuildContext context) {
    return Center();
  }
}

To check if it is being displayed on screen, I define the following test within the 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);
    });
  });
}

Where the key definition is the required one in the first file, and then, the find.byValueKey and await driver ones are the essentials in the test file.

Don't simply run the test. It is running the pp virtually. So we can't import dart: UI . It'll give the error. Use command flutter drive --target=test_driver/app.dart to test it.

Finally, I got run widget tests in my app.

This soluction worked for me.

I found out why, I chose the first option instead of the flutter test. how silly I was, now removing this wrong test type from configuration and run with flutter test works now. See the image about run in Android Studio

Just check that you don't have imports which load flutter packages.

In my case I had 'cupertino' package import from my file app_keys.dart which listed all keys in a format Key('<something>') .

BUT!! UI tests use Key('<something>') constants for Finder but Integration tests - simple strings.

Reference

In Android Studio, right-click on the test file in the Project tree and select "Run". You should see 2 options:

在此处输入图片说明

Make sure you select the second option: "tests in widget_test..."

If you select the first option you will see the Error: Not found: 'dart:ui' and you lose the option to make a selection from the Run context menu.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM