AVEbrahimi
AVEbrahimi

Reputation: 19164

How to find if we are running unit test in Dart (Flutter)

While calling a function from unit test in Flutter (Dart), how can I find if I am running unit test or real application? I want to pass different data if it's in unit test.

Upvotes: 30

Views: 10391

Answers (4)

pierre
pierre

Reputation: 21

If you are running unit test in Dart (not Flutter) you could use :

if (Platform.environment['SESSIONNAME'] == 'Console'){
// unit test behaviour
}

Upvotes: 0

Mobile only:

import 'dart:io';

Web & Mobile:

import 'package:universal_io/io.dart';

Then in your function:

if(Platform.environment.containsKey('FLUTTER_TEST')) {
  //add your code here
}

Using the instance of Platform from dart:io will crash on web when you are not in test mode, so make sure to always use the universal_io/io's instance.

I tested it with universal_io: ^2.2.2 which is working perfectly on all platforms. It seems it wasn't working on older versions as @12806961 stated in his answer.

If you want to use dart:io for mobile and universal_io: ^2.2.2 for web, you can always have conditional import/export of a variable that you would create globally for the project.

Upvotes: 2

Ovidiu
Ovidiu

Reputation: 8714

You can use the following to check if you're running a test.

Platform.environment.containsKey('FLUTTER_TEST')

Solution for web below

Note that the code above doesn't work on web as the Platform class is part of dart:io which is not available on web. An alternative solution that works for all platforms including web would be to use --dart-define build environment variable. It is available from Flutter 1.17

Example of running tests with --dart-define:

flutter drive --dart-define=testing_mode=true --target=test_driver/main.dart

In code you can check this environment variable with the following code:

const bool.fromEnvironment('testing_mode', defaultValue: false)

Not using const can lead to the variable not being read on mobile, see here.

Upvotes: 79

Code on the Rocks
Code on the Rocks

Reputation: 17614

The accepted answer is right but if you want to check for a testing environment without breaking your web code, you can use the universal_io package.

Platform.environment.containsKey('FLUTTER_TEST')

On the web, Platform.environment will return an empty map instead of crashing your app.

Upvotes: 1

Related Questions