当我在项目中使用依赖项注入时,我的小部件测试失败。
\n我的错误如下:
\nTesting started at 10:07 AM ...\nC:\\src\\flutter\\bin\\flutter.bat --no-color test --machine --plain-name "Exist FloatingActionButton" test\\features\\announcement\\presentation\\widgets_test\\announcement_widget_test.dart\n\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1 EXCEPTION CAUGHT BY WIDGETS LIBRARY \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\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\nThe following assertion was thrown building _BodyBuilder:\nNo type AnnouncementBloc is registered inside GetIt.\nDid you forget to pass an instance name?\n(Did you accidentally do GetIt sl=GetIt.instance(); instead of GetIt sl=GetIt.instance;did you\nforget to register it?)\n'package:get_it/get_it_impl.dart':\nFailed assertion: line 251 pos 14: 'instanceFactory != null'\n\nThe relevant error-causing widget was:\nScaffold\nfile:///C:/Projects/niaz-flutter/lib/features/announcement/presentation/pages/announcements_page.dart:15:12\n\nWhen the exception was thrown, this was the stack:\n#2 _GetItImplementation._findFactoryByNameOrType (package:get_it/get_it_impl.dart:251:14)\n#3 _GetItImplementation.get (package:get_it/get_it_impl.dart:263:27)\n#4 _GetItImplementation.call (package:get_it/get_it_impl.dart:288:12)\n#5 new _AnnouncementsWidgetState (package:niaz/features/announcement/presentation/widgets/announcements_widget.dart:22:19)\n#6 AnnouncementsWidget.createState (package:niaz/features/announcement/presentation/widgets/announcements_widget.dart:18:46)\n#7 new StatefulElement (package:flutter/src/widgets/framework.dart:4600:25)\n#8 StatefulWidget.createElement (package:flutter/src/widgets/framework.dart:896:38)\n... Normal element mounting (19 frames)\n#27 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3455:14)\n#28 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5956:32)\n... Normal element mounting (193 frames)\n#221 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3455:14)\n#222 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5956:32)\n... Normal element mounting (255 frames)\n#477 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3455:14)\n#478 Element.updateChild (package:flutter/src/widgets/framework.dart:3220:20)\n#479 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1132:16)\n#480 RenderObjectToWidgetElement.update (package:flutter/src/widgets/binding.dart:1110:5)\n#481 RenderObjectToWidgetElement.performRebuild (package:flutter/src/widgets/binding.dart:1124:7)\n#482 Element.rebuild (package:flutter/src/widgets/framework.dart:4227:5)\n#483 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2632:33)\n#484 AutomatedTestWidgetsFlutterBinding.drawFrame (package:flutter_test/src/binding.dart:1016:18)\n#485 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:284:5)\n#486 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1113:15)\n#487 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1052:9)\n#488 AutomatedTestWidgetsFlutterBinding.pump. (package:flutter_test/src/binding.dart:889:9)\n#491 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:72:41)\n#492 AutomatedTestWidgetsFlutterBinding.pump (package:flutter_test/src/binding.dart:876:27)\n#493 WidgetTester.pumpWidget. (package:flutter_test/src/widget_tester.dart:462:22)\n#496 TestAsyncUtils.guard (package:flutter_test/src/test_async_utils.dart:72:41)\n#497 WidgetTester.pumpWidget (package:flutter_test/src/widget_tester.dart:459:27)\n#498 main. (file:///C:/Projects/niaz-flutter/test/features/announcement/presentation/widgets_test/announcement_widget_test.dart:15:18)\n#499 main. (file:///C:/Projects/niaz-flutter/test/features/announcement/presentation/widgets_test/announcement_widget_test.dart:14:45)\n#500 testWidgets.. (package:flutter_test/src/widget_tester.dart:144:29)\n#511 FakeAsync.flushMicrotasks (package:fake_async/fake_async.dart:192:32)\n#512 AutomatedTestWidgetsFlutterBinding.runTest. (package:flutter_test/src/binding.dart:1109:17)\n#513 AutomatedTestWidgetsFlutterBinding.runTest. (package:flutter_test/src/binding.dart:1097:35)\n(elided 31 frames from class _AssertionError, dart:async, and package:stack_trace)\n\n\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\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\n\nTest failed. See exception logs above.\nRun Code Online (Sandbox Code Playgroud)\n测试描述是:Exist FloatingActionButton
\nDan*_*las 16
这将取决于您最初get_it在项目中的设置方式。
setUpAll为了解决我的设置的这个问题,我只是调用了在测试文件的方法中注册我的依赖项的方法。
所以我在 lib 文件夹的根目录中有一个文件来注册我的依赖项:
final getIt = GetIt.instance;
void setupDependencyInjection() {
GetIt.instance.registerSingleton<SomeServiceInterface>(SomeService());
}
Run Code Online (Sandbox Code Playgroud)
该方法在 main.dart 文件中的 app 方法setupDependencyInjection之前调用。runApp
setUpAll对于测试,您只需在测试文件的方法中调用相同的方法即可。
void main() {
setUpAll(() {
setupDependencyInjection();
});
testWidgets('Some test description', (WidgetTester tester) async {
final widget = TestWidget();
await tester.pumpWidget(widget);
});
}
Run Code Online (Sandbox Code Playgroud)
首先初始化你的依赖容器,然后取消注册之前注册的依赖,然后使用mockdependency注册
import 'package:your_app/injection_container.dart' as di; //import your depencency/ioc container
class MockMyCubit extends MockCubit<MyState> implements MyCubit {}
void main() {
late MockMyCubit mockMyCubit;
setUpAll(() async {
di.init(); //to register your dependencies
mockMyCubit = MockMyCubit(); //create instance of mockCubit
await di.sl.unregister<MyCubit>();//unregister previously registered cubit
di.sl.registerFactory<MyCubit>(() => mockMyCubit); //register mockCubit
});
tearDownAll(() {
di.sl.reset(dispose: true);
});
testWidgets('', (teser) async {
//testyour widget here
}
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
14281 次 |
| 最近记录: |