Flutter测试错误:NotInitializedError,涉及环境变量(.env)

Bri*_*Kan 3 testing environment-variables flutter flutter-test

首先,我确实检查了这一点,但没有结果。\n如何从测试中访问 Flutter 环境变量?

\n
import \'package:flutter/widgets.dart\';\nimport \'package:flutter_test/flutter_test.dart\';\n\nimport \'package:integration_test/integration_test.dart\';\nimport \'package:main.dart\' as app;\n\nimport \'package:mockito/annotations.dart\';\nimport \'package:firebase_auth/firebase_auth.dart\' as firebaseauth;\n\nimport \'package:flutter_dotenv/flutter_dotenv.dart\';\n\nimport \'basic_app_test.mocks.dart\';\n\n\n@GenerateMocks([firebaseauth.FirebaseAuth])\nvoid main() async {\n  TestWidgetsFlutterBinding.ensureInitialized();\n  await DotEnv().load(fileName: ".env");\n\n  group(\'Login Page Tests\', () {\n    testWidgets(\'Empty Login Box\', (WidgetTester tester) async {\n      app.main();\n\n      await tester.pumpAndSettle(Duration(seconds: 3));\n\n      expect(find.byKey(Key(\'loginButton\')), findsOneWidget);\n\n      final Finder loginButton = find.byKey(Key(\'loginButton\'));\n\n      await tester.tap(loginButton);\n\n      await tester.pumpAndSettle();\n\n      expect(\n          find.text(\n              \'Something went wrong. Please check your email and password and try again.\'),\n          findsOneWidget);\n    });\n\n    testWidgets(\'Email Login - Proper Credentials\',\n        (WidgetTester tester) async {\n\n      app.main();\n\n      // Wait for app to reach the login page\n      await tester.pumpAndSettle(Duration(seconds: 3));\n\n      final Finder emailBox = find.byKey(Key(\'emailBox\'));\n      final Finder passwordBox = find.byKey(Key(\'passwordBox\'));\n      final Finder loginButton = find.byKey(Key(\'loginButton\'));\n      final Finder welcomeHeader = find.byKey(Key(\'welcomeHeader\'));\n\n      var testPassword = DotEnv().env[\'TEST_PASSWORD\'];\n      await tester.enterText(passwordBox, testPassword);\n\n      expect(find.byKey(Key(\'loginButton\')), findsOneWidget);\n      await tester.tap(loginButton);\n      await tester.pumpAndSettle(Duration(seconds: 5));\n\n      // SHOULD BE EXPECTING A WIDGET IN THE NEXT WINDOW\n      expect(welcomeHeader, findsOneWidget);\n    });\n  });\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

我有一组测试。第一个运行得很好。第二个在创建 testPassword 变量时遇到错误。

\n

这是错误:

\n
\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1 EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK \xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\nThe following NotInitializedError was thrown running a test:\nInstance of \'NotInitializedError\'\n\nWhen the exception was thrown, this was the stack:\n#0      DotEnv.env (package:flutter_dotenv/src/dotenv.dart:42:7)\n#1      main.<anonymous closure>.<anonymous closure> (file:///D:/WEBDEV/EndevStudios/MedicalApp/gshDevWork/medical-app-frontend/integration_test/basic_app_test.dart:52:31)\n<asynchronous suspension>\n<asynchronous suspension>\n(elided one frame from package:stack_trace)\n\nThe test description was:\n  Email Login - Proper Credentials\n
Run Code Online (Sandbox Code Playgroud)\n

.env文件位于根目录。

\n

我的pubspec.yaml文件:

\n
dependencies:\n  flutter_dotenv: ^5.0.2\n\nflutter:\n    #Integration Testing\n    - .env\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试过的: \n大多数解决方案都涉及TestWidgetsFlutterBinding.ensureInitialized();or IntegrationTestWidgetsFlutterBinding.ensureInitialized();以及 和await DotEnv().load(fileName: ".env");的一些变体await DotEnv().load();

\n

预先感谢任何可以提供帮助的人。

\n

小智 5

你需要从

await DotEnv().load(fileName: ".env");
Run Code Online (Sandbox Code Playgroud)

到:

await dotenv.load(fileName: ".env");
Run Code Online (Sandbox Code Playgroud)

使用最新的库。