如何在视图模型中测试提供者

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 实现。