【问题标题】:How to test provider in view model如何在视图模型中测试提供者
【发布时间】:2021-12-08 11:26:38
【问题描述】:
我有一个视图使用的视图模型,我想为包含提供程序的功能之一编写单元测试。函数是这样的
Future<String> onSubmit(BuildContext context) async {
PersonProvider personProvider = Provider.of<PersonProvider>(context,listen: false);
String userId = personProvider.user.id;
isLoading = true;
return 'hello';
});}
有没有我可以测试一下,或者我必须重构代码
【问题讨论】:
标签:
flutter
flutter-test
flutter-provider
【解决方案1】:
您应该重构您的代码,如果该函数在 ViewModel 中,问题是它不应该对表示层一无所知或尽可能少。所以它不应该依赖BuildContext,而是直接将所需的依赖项传递给函数:
Future<String> onSubmit(PersonProvider personProvider) async {
String userId = personProvider.user.id;
isLoading = true;
return 'hello';
});}
或者将其注入到 ViewModel 构造函数中,这样您就可以将 viewModel 与 UI 以及 PersonProvider 分离,现在可以将其作为模拟传递以进行测试。
如果您所说的 viewmodel 真的只是一个演示者,您可以进行小部件测试并为小部件树提供一个 Mock PersonProvider 实现。