只是想知道我是否可以确定我的应用程序当前是否在“测试”环境中运行。 原因是我正在运行自动屏幕截图,并且只想在运行该UI测试时隐藏/修改我的App的某些部分。
例如,我想跳过注册推送通知,以避免启动时出现该iOS弹出窗口。
我正在寻找类似的东西
if (kTestingMode) { ... }
我知道我们确实有一个驱动程序,该驱动程序基本上可以启动应用程序,然后进行连接。猜猜该应用程序实际上甚至不知道它是否在测试模式下运行。但是也许有人知道答案。
谢谢!
答案 0 :(得分:1)
另一种解决方案是使用--dart-define构建环境变量。它可以从Flutter 1.17
获得使用--dart-define运行测试的示例:
flutter drive --dart-define=testing_mode=true --target=test_driver/main.dart
在代码中,您可以使用以下代码检查此环境变量:
const bool.fromEnvironment('testing_mode', defaultValue: false)
不使用const
会导致无法在移动设备上读取该变量,请参见here。
答案 1 :(得分:0)
好的,我自己找到了一个解决方案。 我所做的是引入一个全局变量,该变量将在主驱动程序中设置。
首先,我创建了一个新的globals.dart
文件:
library my_prj.globals;
bool testingActive = false;
然后,在我的test_driver/main.dart
文件中导入该文件,并将testingActive
变量设置为true
import '../lib/globals.dart' as globals;
..
void main() {
final DataHandler handler = (_) async {
final response = {};
return Future.value(c.jsonEncode(response));
};
// Enable integration testing with the Flutter Driver extension.
// See https://flutter.io/testing/ for more info.
enableFlutterDriverExtension(handler: handler);
globals.testingActive = true;
WidgetsApp.debugAllowBannerOverride = false; // remove debug banner
runApp(App());
}
现在,仅通过导入和检查,我的Flutter App中到处都有这个全局变量。
例如在我的app.dart
import '../globals.dart' as globals;
...
if (globals.testingActive) {
print("We are in a testing environment!");
}
有更好的解决方案吗?猜猜这很好用!
答案 2 :(得分:0)
我对此有另一种解决方案,也许这对您也可行。让我知道这是否适合您。
1。因此,我建议使用assert()
,因为它仅在调试模式下运行。
以下是导航器的示例:
assert(() {
if (navigator == null && !nullOk) {
throw new FlutterError(
'Error!!!'
);
}
return true;
}());
注意:特别是调用结束时的()-assert只能对布尔值进行操作,因此仅传递函数是无效的。
2。。另一种方法是使用软件包kReleaseMode
中的package:flutter/foundation.dart
kReleaseMode
是一个常数。因此,编译器能够正确删除未使用的代码,我们可以放心地这样做:
import 'package:flutter/foundation.dart' as Foundation;
//is release mode
if (Foundation.kReleaseMode) {
print('release mode');
} else {
print('debug mode');
}
3。。这是对您有帮助的代码段:
bool get isInDebugMode {
bool inDebugMode = false;
assert(inDebugMode = true);
return inDebugMode;
}
如果没有,则可以将IDE配置为在调试模式下启动另一个main.dart,在其中可以设置布尔值。
答案 3 :(得分:0)
一些答案旨在检测您是否处于调试模式。问题是关于如何检测是否在测试环境中,而不是如何在调试模式下。实际上,在运行测试时,您处于调试模式,但是即使不运行测试,也可以在调试模式下运行应用程序。
为了正确检测您是否正在运行测试,可以在Platform.environment中检查密钥FLUTTER_TEST的存在。
import 'dart:io' show Platform;
if (Platform.environment.containsKey('FLUTTER_TEST')) { ... }