如何从测试中访问 Flutter 环境变量?
How to access Flutter environment variables from tests?
我一直在使用 flutter_dotenv 加载在整个应用程序中保存在 .env
中的环境变量,到目前为止它运行良好。虽然我正在尝试编写测试,但我似乎无法从测试文件访问这些。
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
setUp(() async {
await DotEnv().load();
});
test('Incorrect password should be rejected', () {
var password = DotEnv().env['PASSWORD'];
// stuff
});
}
运行 测试结果:
Shell: [flutter_dotenv] Load failed: file not found
Shell: [flutter_dotenv] No env values found. Make sure you have called DotEnv.load()
它似乎找不到 .env
文件。我什至在测试目录中制作了 .env
的副本,但它也无法识别。
我试过使用 Platform.environment 而不是 flutter_dotenv 来访问变量,但这也没有用,返回 null。
抱歉,我在这里很傻,这是我第一次编写 Flutter 测试,但希望得到建议。
更新:
这是我的 pubspec.yaml
的样子:
name: //name
description: //description
version: 1.0.0+3
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
font_awesome_flutter: ^8.5.0
flutter_youtube: ^2.0.0
http: ^0.12.0+4
flutter_dotenv: ^2.1.0
google_fonts: ^0.3.7
photo_view: ^0.9.2
flutter_page_transition: ^0.1.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- images/
- .env
添加 TestWidgetsFlutterBinding.ensureInitialized();
作为测试主要功能的第一行。
flutter_dotenv 正在尝试访问 ServicesBinding 与应用程序平台交互的 mixin。您需要先初始化此绑定,然后再访问它,上面的代码行将确保此初始化发生在 运行 您的测试之前。
您的代码应如下所示:
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() async {
TestWidgetsFlutterBinding.ensureInitialized();
await DotEnv().load();
setUp(() {
// anything else you need to setup
});
test('Incorrect password should be rejected', () {
var password = DotEnv().env['PASSWORD'];
// stuff
});
}
对于 FileNotFoundError 类型的错误,请更新 flutter_dotenv。从版本 5.0.1 开始,有一个名为 testLoad() 的新方法可以按预期工作,因为它不使用 rootBundle 将文件作为资产。
我一直在使用 flutter_dotenv 加载在整个应用程序中保存在 .env
中的环境变量,到目前为止它运行良好。虽然我正在尝试编写测试,但我似乎无法从测试文件访问这些。
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
setUp(() async {
await DotEnv().load();
});
test('Incorrect password should be rejected', () {
var password = DotEnv().env['PASSWORD'];
// stuff
});
}
运行 测试结果:
Shell: [flutter_dotenv] Load failed: file not found
Shell: [flutter_dotenv] No env values found. Make sure you have called DotEnv.load()
它似乎找不到 .env
文件。我什至在测试目录中制作了 .env
的副本,但它也无法识别。
我试过使用 Platform.environment 而不是 flutter_dotenv 来访问变量,但这也没有用,返回 null。
抱歉,我在这里很傻,这是我第一次编写 Flutter 测试,但希望得到建议。
更新:
这是我的 pubspec.yaml
的样子:
name: //name
description: //description
version: 1.0.0+3
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
font_awesome_flutter: ^8.5.0
flutter_youtube: ^2.0.0
http: ^0.12.0+4
flutter_dotenv: ^2.1.0
google_fonts: ^0.3.7
photo_view: ^0.9.2
flutter_page_transition: ^0.1.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- images/
- .env
添加 TestWidgetsFlutterBinding.ensureInitialized();
作为测试主要功能的第一行。
flutter_dotenv 正在尝试访问 ServicesBinding 与应用程序平台交互的 mixin。您需要先初始化此绑定,然后再访问它,上面的代码行将确保此初始化发生在 运行 您的测试之前。
您的代码应如下所示:
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_test/flutter_test.dart';
void main() async {
TestWidgetsFlutterBinding.ensureInitialized();
await DotEnv().load();
setUp(() {
// anything else you need to setup
});
test('Incorrect password should be rejected', () {
var password = DotEnv().env['PASSWORD'];
// stuff
});
}
对于 FileNotFoundError 类型的错误,请更新 flutter_dotenv。从版本 5.0.1 开始,有一个名为 testLoad() 的新方法可以按预期工作,因为它不使用 rootBundle 将文件作为资产。