如何在视图模型中测试提供者
How to test provider in view model
我有一个视图使用的视图模型,我想为其中一个包含提供程序的函数编写单元测试。函数是这样的
Future<String> onSubmit(BuildContext context) async {
PersonProvider personProvider = Provider.of<PersonProvider>(context,listen: false);
String userId = personProvider.user.id;
isLoading = true;
return 'hello';
});}
无论如何我可以测试这个,或者我必须重构代码
您应该重构您的代码,如果该函数在 ViewModel 中,问题在于它不应该对表示层一无所知或尽可能少。所以它不应该依赖于 BuildContext
,而是直接将所需的依赖项传递给函数:
Future<String> onSubmit(PersonProvider personProvider) async {
String userId = personProvider.user.id;
isLoading = true;
return 'hello';
});}
或者将其注入 ViewModel 构造函数,这样您就可以将 viewModel 与 UI 和 PersonProvider
分离,现在可以将其作为模拟传递以进行测试。
如果您所指的视图模型实际上只是一个演示者,您可以进行小部件测试并为小部件树提供模拟 PersonProvider
实现。
我有一个视图使用的视图模型,我想为其中一个包含提供程序的函数编写单元测试。函数是这样的
Future<String> onSubmit(BuildContext context) async {
PersonProvider personProvider = Provider.of<PersonProvider>(context,listen: false);
String userId = personProvider.user.id;
isLoading = true;
return 'hello';
});}
无论如何我可以测试这个,或者我必须重构代码
您应该重构您的代码,如果该函数在 ViewModel 中,问题在于它不应该对表示层一无所知或尽可能少。所以它不应该依赖于 BuildContext
,而是直接将所需的依赖项传递给函数:
Future<String> onSubmit(PersonProvider personProvider) async {
String userId = personProvider.user.id;
isLoading = true;
return 'hello';
});}
或者将其注入 ViewModel 构造函数,这样您就可以将 viewModel 与 UI 和 PersonProvider
分离,现在可以将其作为模拟传递以进行测试。
如果您所指的视图模型实际上只是一个演示者,您可以进行小部件测试并为小部件树提供模拟 PersonProvider
实现。